Silverlight (少なくともバージョン 4 の時点) には、WPFCharacterEllipsis
にある のオプションがありません。で使用できます。つまり、「それは信じられない」を表示する十分なスペースがない場合、「それは...」にトリミングできますが、「それは信じられない...」にはトリミングできません。TextTrimming
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;
}
しかし、コード ビハインド (または 内Behavior
) でそれを行うと、いくつかの問題が発生しますTextBlock1.Text = ...
。view と viewModel が何らかの理由で同期していない可能性があることに気付いたため、別の問題が発生しました (ListBox で気付きました)。
この問題を良い方法で解決する方法について、より良いアイデアはありますか?