2016-11-13 39 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来修剪文本。