更改文本截断行为
问题描述:
我想在TextBlock中显示路径。更改文本截断行为
标准截断最终删除了我想要显示的信息的相关部分,因为它首先截断了该行的最右边部分。
有没有什么方法可以在XAML中指定文本应该从左边的第一个而不是右边被截断?设置的FlowDirection和TextReadingOrder似乎并没有对截断的方向没有任何影响,如下所示:
<TextBlock Text="{Binding Path}" FontSize="18" FlowDirection="RightToLeft" TextReadingOrder="UseFlowDirection" TextTrimming="CharacterEllipsis" />
是否有可能在XAML纯,或解决方案是否需要比这更复杂的(检查页面上文本块的大小调整大小并修改文本以进行补偿)?
答
我想你想修剪左边的文字,当文字太长?如果是这样,在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
。
此外,由于您使用TextBlock
的Text
属性的数据绑定,因此您可以创建converter
来修剪文本。
你检查了我的答案吗?任何问题? –