Silverlight(至少在版本4時)沒有CharacterEllipsis
選項用於TextTrimming
,其中WPF has。它可以在TextBlock
上使用。這意味着,如果沒有足夠的空間來顯示「這是不可思議的」,我可以修剪爲「這就是...」,但不是「我們想要的那個......」。在Silverlight中丟失TextTrimming選項「CharacterEllipsis」的替換
雖然我們會嘗試實現我們的自定義文本修剪功能。基本上,那不是那麼難。一個非常愚蠢的方法是測量字符串的像素,與可用寬度進行比較,並通過剪切最後一個字符並在循環中添加「...」來處理字符串,而文本仍然不適合。下面是一個例子,如何這可能是工作:
// 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;
}
但這樣做,在後面的代碼(或內Behavior
)導致了一些問題:例如,當我們要更新顯示的文本,並設置TextBlock中的TextBlock1.Text = ...
物業如果Text綁定到ViewModel屬性,它實際上可能會改變我們的viewModel。由於我們注意到view和viewModel可能由於某種原因(我們注意到在ListBox中)發生了同步運行,所以出現了另一個問題。
對於如何以良好的方式解決這個問題你有更好的想法嗎?
這的確不錯,但我將不得不「* [...]傳中特定數量的字符[...] *「這意味着它只適用於固定寬度區域,我將不得不自己估計數字,我正在尋找一種動態解決方案,通過可用寬度自動估計字符數量(就像'CharacterEllipsis'行爲一樣在WPF中) – thmshd 2011-06-01 19:38:40
Thanks,this help me with our issue。 – cunningdave 2012-06-11 18:32:47