我想在TextBlock中显示一个路径。
标准截断最终删除了我想要显示的信息的相关部分,因为它首先截断了行的最右边部分。
在XAML中,是否有任何方法可以指定文本应该从左第一而不是从右截断?设置FlowDirection和TextReadingOrder似乎对截断方向没有任何影响,如下所示:
<TextBlock Text="{Binding Path}" FontSize="18" FlowDirection="RightToLeft" TextReadingOrder="UseFlowDirection" TextTrimming="CharacterEllipsis" />是否可以在纯XAML中使用,或者解决方案是否需要更复杂(检查页面上文本块的大小并修改文本以进行补偿)?
发布于 2016-11-14 07:38:16
我想当文本太长的时候,你想从左边修剪一下文本吗?如果是这样的话,没有这样的属性可以设置来帮助这项工作在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的TextBlock属性的数据绑定,所以您可以创建一个converter来修剪文本。
https://stackoverflow.com/questions/40570378
复制相似问题