1

我的 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 字符),它需要是可变的,并且包括源字符串中包含的任何结束标点符号。

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

4

2 回答 2

2

简单的方法:使用 a DockPanel,在其中放两个TextBlocks,第一个显示带有省略号修剪的字符串,第二个显示右括号,停靠在右侧:

<DockPanel>
    <TextBlock Text=")" DockPanel.Dock="Right" />
    <TextBlock Text="{Binding PageTitle}" TextTrimming="CharacterEllipsis" />
</DockPanel>

如果您想自己进行修剪,可以查看我在这篇文章中的回答:Ellipsis at start of string in WPF ListView

于 2016-04-22T16:23:12.170 回答
0

我没有适合您的实现,但由于您使用的是绑定,我会考虑使用转换器而不是自定义控件。您可以访问转换方法的参数中所需的所有内容,以计算要显示多少字符串并完全控制它的显示方式,而无需修改视图模型中的数据。

于 2012-11-30T16:36:11.537 回答