2016-11-13 5 views
0

TextBlockにパスを表示したいとします。テキストの切り捨て動作を変更する

標準的な切り詰めは、私が表示したい情報の関連部分を削除することになります。なぜなら、最初の行の右端を切り捨てるからです。

XAMLでテキストを右ではなく左から切り捨てるように指定する方法はありますか?流れ方向とTextReadingOrderを設定すると、下図のように、切り捨ての方向に影響を持っていないようです:

<TextBlock Text="{Binding Path}" FontSize="18" FlowDirection="RightToLeft" TextReadingOrder="UseFlowDirection" TextTrimming="CharacterEllipsis" /> 

は、それは純粋なXAMLで可能であり、または溶液は、(調べるよりも複雑である必要はありませんページ上のテキストブロックのサイズを変更し、テキストを修正して補正する)?

+0

私の答えを確認しましたか?どんな質問ですか? –

答えて

0

テキストが長すぎるときに左からテキストをトリミングしたいと思いますか?もしそうなら、UWPでこの仕事を助けるために設定できるそのような財産はありません。自分でそれをトリミングする必要があります。

<TextBlock Text="Left-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz-Right" 
      Margin="0,5" TextWrapping="NoWrap" 
      Loaded="TextBlock_Loaded" /> 

コードの背後にある:ここで

は私のデモです

private void TextBlock_Loaded(object sender, RoutedEventArgs e) 
{ 
    var tb = sender as TextBlock; 
    //desired width of TextBlock 
    var desiredWidth = tb.DesiredSize.Width; 
    //cal. char. in string 
    var count = tb.Text.Count(); 
    var reducedText = tb.Text; 
    if (reducedText != "") 
    { 
     //actual width of text 
     var textWidth = tb.ActualWidth; 
     //trim count 
     var trimCount = Math.Ceiling((count/textWidth) * desiredWidth) - 4; 
     reducedText = "... " + reducedText.Substring((int)(count - trimCount), (int)trimCount); 
     tb.Text = reducedText; 
    } 
} 

私のデモのみテキストが非常に長いシナリオを考える(ActualWidth> DesiredWidth)、あなたはまた、シナリオを実装しますサイズがテキストを保持するのに十分である場合。そして、イベントでのみ動作するように注意してください.ActualWidthはテキスト幅ではなくレンダリングされた幅に変更され、TextBlockは完全にレンダリングされます。

また、のTextプロパティのデータバインディングを使用しているため、converterを作成してテキストをトリミングできます。

関連する問題