在WPF TextBlock中自定义文本修剪

时间:2012-11-30 16:23:44

标签: wpf trim textblock

我的WPF视图中有一个TextBlock元素,它与视图模型中的字符串属性绑定数据。现在,此属性中的文本可以更长一些,因此应该将其修剪为单行显示。不应更改布局,因此必须避免使用多行。此外,不应更改数据绑定源并保持单个字符串。要显示的文本类似于以下示例:

  • XY的一些对象
  • ABC的另一个目标
  • 3个模糊对象(XY,ABC,DEF)
  • 20个很棒的物体(XY#1,#2,ABC#2,#3,DEF,GHI,还有一些,更多)

简单的解决方案就是:

<TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis"/>

这适用于前两个示例文本,但在最后两个示例中,我希望右括号保持可见。所以我现在得到的是:

  • 20个很棒的物品(XY#1,#2,ABC#2,#3,DEF ......

但我寻求的是:

  • 20个很棒的物品(XY#1,#2,ABC#2,#3,DEF ......

WPF中有一种简单的方法吗?基本上,省略号字符串现在总是三个点(在视觉上,也可能是Unicode字符),需要是可变的,并且包括源字符串中包含的任何结束标点符号。

如果有必要,我可以为此编写一个自定义控件,但也需要帮助实现修剪。

2 个答案:

答案 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中访问所需的所有内容,以计算要显示的字符串的大小,并完全控制其显示方式,而无需修改视图模型中的数据。