更改文本截断行为
Posted
技术标签:
【中文标题】更改文本截断行为【英文标题】:Changing text truncation behavior 【发布时间】:2017-03-27 00:08:56 【问题描述】:我想在 TextBlock 中显示路径。
标准截断最终会删除我要显示的信息的相关部分,因为它首先截断该行的最右边部分。
有没有办法在 XAML 中指定文本应该先从左边截断而不是从右边截断?设置 FlowDirection 和 TextReadingOrder 似乎对截断方向没有任何影响,如下所示:
<TextBlock Text="Binding Path" FontSize="18" FlowDirection="RightToLeft" TextReadingOrder="UseFlowDirection" TextTrimming="CharacterEllipsis" />
在纯 XAML 中是否可行,或者解决方案是否需要比这更复杂(检查页面调整大小时文本块的大小并修改文本以进行补偿)?
【问题讨论】:
你检查我的答案了吗?有什么问题吗? 【参考方案1】:我想当文本太长时你想从左边修剪文本?如果是这样,在 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
来修剪文本。
【讨论】:
以上是关于更改文本截断行为的主要内容,如果未能解决你的问题,请参考以下文章