thm*_*shd 2 silverlight silverlight-4.0 texttrimming
的Silverlight(至少,如第4版的)不具有CharacterEllipsis
选项TextTrimming
,这WPF具有.它可以用于TextBlock
.这意味着,如果没有足够的空间来展示"那令人难以置信",我可以修剪为"那是......"而不是"那太棒了......"我们宁愿这么想.
不过,我们会尝试实现自定义文本修剪功能.基本上,那不是那么难.一种非常愚蠢的方法是测量字符串的像素,与可用宽度进行比较,并通过剪切最后一个字符并在文本仍然不适合的循环中添加"..."来操纵字符串.以下是一个如何工作的示例:
// Not perfect but good enough for us
private bool AutoTrim(string fullText, TextBlock textBlock, double maxWidth)
{
double factor = maxWidth / textBlock.ActualWidth;
if (factor > 1)
return false;
int newTextLength = (int)Math.Floor((double)fullText.Length * factor);
string trimTest;
do
{
trimTest = fullText.Substring(0, newTextLength--);
textBlock.Text = trimTest + "..."; // problematic...
factor = maxWidth / textBlock.ActualWidth;
}
while (factor < 1 && newTextLength > 0);
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是在代码后面(或在代码中Behavior
)执行此操作会导致一些问题:例如,当我们想要更新显示的文本并设置TextBlock的TextBlock1.Text = ...
属性时,如果Text绑定到ViewModel属性,它实际上可能会更改我们的viewModel.另一个问题出现了,因为我们注意到view和viewModel可能由于某种原因而运行同步(我们注意到在ListBox中).
你对如何以一种好的方式解决这个问题有了更好的想法吗?
Robby Ingebretsen的DynamicTextBox通过将TextBlock包装在自定义控件中并测量可用大小来实现此目的.它匹配WPF的CharacterEllipsis文本修剪模式.WordEllipsis模式确实被添加到Windows Phone 7 Mango,但这在这里没有多大帮助.
归档时间: |
|
查看次数: |
4044 次 |
最近记录: |