如何让过长的字符串可以自动变成 “…” - 从开发人员的角度看 Canvas、Grid
在 WPF、Silverlight 还没有出来之前,想要有下图这种效果!?
默认的控件都没有!想要?那就要自已刻一个 Control
若是 Web 的话,那就更惨!还要写一堆的 JS 可以用 CSS3 的 text-ellipse
( 注:感恩 Eric 的提醒,但记得要看浏览器有没有支持 )
现在在 WPF、Silverlight 之中一开始就有内建这样子的属性
尤其是在 Phone 这种小屏幕中更需要
基本上很简单!
只要在 TextBlock 再选 属性 就可以看到 TextTrimming 属性了
接着选 WordEllipsis 就大功告成!
但不知是否有人跟我一样遇到
这样子的情况呢? TextTrimming 明明就设了!
但为啥还字还是跑到外面去?
Width 是不是设成自动?
Windows Phone 是不是没有支持这个属性?
Align 是不是设到 right ?
不不不!这个我都检查过了!但跟 MSDN 上说的就是不一样 Orz
最后跟 Eric 讨论时,问了一下这个属性有没有用过!?
Eric 很顺地可以正常转换成 “…”
我心中的 OS :难道真的是 森哥讲的 这就是人品问题?
这时 Eric 说了关键性的一句话!“有没有用 Grid”?
从 Canvas 改成 Grid 后整个就是 晴天霹雳
一切就正常!!
----------------------------------------
为什么 TextBlock 的 TextTrimming 在 Canvas 和 Grid 有不一样的效果?
----------------------------------------
一开始 Canvas 和 Grid 对我来说真的没有什么差异
( 就从开发人员的角度而言 )
直到 TextTrimming 这个属性我才直惊觉到差异很大…
每次看在 MSDN、书籍在介绍 Canvas 、Grid 、StackPanel
都是在说对象是怎么排列的之类
面板名称 | 说明 |
---|---|
Canvas | 定义一个区域,您可以在这个区域内依据相对于 Canvas 区域的座标,明确放置子项目。 |
Grid | 定义由数据行和数据列组成的弹性方格区域。 |
StackPanel | 将子项目排列在可为水平或垂直方向的单一行中。 |
实际上真的没有什么感觉!好像跟开发人员没关系
反正画面出来长的一样,剩下的就随便啦!
查了很久总算有一个可以说服我的了!
MSDN 的 Silverlight 配置系统
http://msdn.microsoft.com/zh-tw/library/cc645025(v=vs.95).aspx#LayoutSystem_LayoutSystem
简单来说!
就是 Canvas 是用一种绝对位置当做座标!
即使画面放大、缩小、超出 Canvas 范围 内容 都不会受到任何影响!
而 Grid 则是会依画面变小而改变 Grid 内的控件
也不允许 内容超出 控件范围!
所以才会造成在 Canvas 中
即使设定了 TextTrimming 过长的字符串依然会跑到外面去的情况发生
以后大家就不会分不清楚到底要用那一个了
参考数据
Silverlight 配置系统
http://msdn.microsoft.com/zh-tw/library/cc645025(v=vs.95).aspx#LayoutSystem_LayoutSystem
Grid 类
http://msdn.microsoft.com/zh-tw/library/system.windows.controls.grid(v=vs.95).aspx
Canvas 类
http://msdn.microsoft.com/zh-tw/library/system.windows.controls.canvas(v=vs.95).aspx
原文:大专栏 如何让过长的字符串可以自动变成 “…” - 从开发人员的角度看 Canvas、Grid