我的WPF视图中有一个TextBlock元素,它与视图模型中的字符串属性绑定数据。现在,此属性中的文本可以更长一些,因此应该将其修剪为单行显示。不应更改布局,因此必须避免使用多行。此外,不应更改数据绑定源并保持单个字符串。要显示的文本类似于以下示例:
简单的解决方案就是:
<TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis"/>
这适用于前两个示例文本,但在最后两个示例中,我希望右括号保持可见。所以我现在得到的是:
但我寻求的是:
WPF中有一种简单的方法吗?基本上,省略号字符串现在总是三个点(在视觉上,也可能是Unicode字符),需要是可变的,并且包括源字符串中包含的任何结束标点符号。
如果有必要,我可以为此编写一个自定义控件,但也需要帮助实现修剪。
答案 0 :(得分:2)
简单方法:使用DockPanel
,在其中放置两个TextBlock
,第一个显示带有省略号修剪的字符串,第二个显示右括号,停靠在右侧:
<DockPanel>
<TextBlock Text=")" DockPanel.Dock="Right" />
<TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis" />
</DockPanel>
如果您想自己修剪,可以在这篇文章中查看我的答案:Ellipsis at start of string in WPF ListView。
答案 1 :(得分:0)
我没有为您实现,但由于您正在使用绑定,我会考虑使用转换器而不是自定义控件。您可以在转换方法的args中访问所需的所有内容,以计算要显示的字符串的大小,并完全控制其显示方式,而无需修改视图模型中的数据。