2016-11-13 40 views
0

我想在TextBlock中顯示路徑。更改文本截斷行爲

標準截斷最終刪除了我想要顯示的信息的相關部分,因爲它首先截斷了該行的最右邊部分。

有沒有什麼方法可以在XAML中指定文本應該從左邊的第一個而不是右邊被截斷?設置的FlowDirection和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),您還將實施方案如果大小足以容納文本。並且請注意,此方法僅適用於Loaded事件,因爲ActualWidth將更改爲其呈現的寬度而不是文本寬度,因此完全呈現TextBlock

此外,由於您使用TextBlockText屬性的數據綁定,因此您可以創建converter來修剪文本。