【问题标题】:TextTrimming with Ellipsis and a Colon带有省略号和冒号的 TextTrimming
【发布时间】:2012-03-26 16:43:23
【问题描述】:

这是一个比较简单的问题:

我可以使用以下方法修剪带有省略号的文本:

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

它会给我一些类似的东西:

“这句话太长了”

=>

“这句话我……”

这一切都很棒而且花花公子,但我真正想要的是这个:

“这句话……:”/“这句话……:”

我正在寻找的是省略号后的冒号。有没有简单的方法来实现这一点?

编辑:

抱歉给您带来了困惑。

我想将默认省略号字符串从“...”更改为“...:”。同样,我将在文本字符串本身中包含一个冒号。这样,我将始终显示冒号。同样,在任何情况下,一切都应该在一条线上。

这里有几个可以接受的结果:

足够短:

太过分了……:

【问题讨论】:

标签: wpf texttrimming


【解决方案1】:

这可行,但我需要添加一些填充以使冒号始终可见:

<TextBlock Padding="0,0,5,0" >
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
    <TextBlock>:</TextBlock>
</TextBlock>

【讨论】:

  • 呃,这很好用,只是在某些时候,冒号文本块似乎被文本文本块隐藏了。无论如何,这是最简单的工作情况。
  • 是的,我认为添加填充可以解决这个问题。我希望你可以让它工作,也许在第二个 TextBlock 上填充。
  • 包装器的填充绝对有帮助(实际上我已经将它与所有其他容器一起放置)。在冒号 TB 的左侧添加填充实际上比您的实现更糟糕。也许通过修改值和填充应用到哪一侧可以解决所有问题;不过,它现在不值得付出努力,因为您的示例足以用于演示目的。
  • 检查 元素。文本由 类型组成,处于通常工作的较低级别,但它允许您突出显示字符串中的子字符串,例如。请参阅stackoverflow.com/questions/3356053/… 上的“绑定 Span 的内容”
【解决方案2】:

使用两个TextBlocks,第一个例子是省略号,第二个例子是冒号。

更新:

看起来这是一个相对简单的问题,但有很多复杂性。

一个人可能想拥有一些 TextBlock,第一个带有目标文本,另外两个显示“:”和“...:”,并根据第一个 TextBlock 是否有足够的空间在它们之间切换显示其所有文本。这有可能,但可能会导致布局不稳定。

刚刚实现了一个自定义面板,我可以想象一个可能的解决方案,其中涉及一个设计用于容纳三个孩子的解决方案,这将是上面描述的三个 TextBlockl

从 Panel 继承的自定义面板应覆盖两个关键方法:Measure 和 Arrange。

在测量方法中,所有的孩子都应该被测量。

在排列方法中检查是否有足够的空间来显示前两个孩子,如果有,将它们并排放置。如果没有足够的空间显示第一个孩子的大小以允许第三个孩子房间显示并将第三个孩子设置为右对齐。

更新:

我尝试了自定义面板,它工作正常,除了第一个 TextBox 是剪辑部分字符。

干净格式的最终​​解决方案是调整显示字符串直到适合分配的空间并应用适当的后缀。

【讨论】:

  • 并且始终显示冒号,即使没有省略号?
  • Clemens - 很抱歉造成混乱,但我确实希望冒号始终显示 Doug - 这通常是我想要的效果。我已经尝试过了,在某些宽度下,冒号会下降到下一行。这还不够好。这两个文本块位于列表框项内的停靠面板内的水平环绕面板中。还有一个图像控件停靠在包装面板的左侧。
  • @FZdev 那么你为什么不简单地将两个 TextBlocks 放在一个水平的 DockPanel 中,首先是冒号 TextBlock,其次是修剪后的 TextBlock 和 DockPanel.Dock 的正确值。因此,默认情况下,修剪后的 TextBlock 会填充冒号未占用的所有空间。或者更好的是,使用网格。
  • 啊,grid和dock的问题是,当字符串不是很长(屏幕很宽)时冒号和字符串会分开。
  • 对冒号和文本使用自动列意味着文本从不换行。好像应该有办法限制大小,但我现在想不出来。
【解决方案3】:

如果你的字符串中不包含冒号,你可以使用Binding.StringFormat:

<TextBlock Text="{Binding, StringFormat={}{0}:}" TextTrimming="CharacterEllipsis"/>

(我意识到这是一个非常古老的问题,但我碰巧偶然发现了它,所以我想我会把它扔给其他关注的人。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2016-12-22
    • 2013-07-24
    相关资源
    最近更新 更多