我想在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&gt; DesiredWidth),如果大小足以容纳文本,您还将实现场景。请注意,此方法仅适用于Loaded
事件,因为ActualWidth
将更改为其呈现的宽度而不是文本宽度,然后TextBlock
将完全呈现。
此外,由于您对Text
的{{1}}属性使用数据绑定,因此您可以创建TextBlock
来修剪文本。