文本从左侧修剪
有没有办法指定 TextBlock
上的文本修剪从左侧开始?
我已经成功完成了三种情况中的两种(第三种是我需要的):
定期修剪
<前><代码><文本块 垂直对齐=“居中” 宽度=“80” TextTrimming="WordEllipsis" Text="很长的文本,需要修剪" /> // 结果:“很长的时间...”左侧修剪
<前><代码><文本块 垂直对齐=“居中” 宽度=“80” 流向=“从右到左” TextTrimming="WordEllipsis" Text="非常长的文本,需要修剪。" >> // 结果:“...很长的te”在看到文本末尾的地方进行左修剪
// 期望的结果:“...uires 修剪”
有人知道这是否可能吗?谢谢。
Is there a way to specify text trimming on a TextBlock
to be from the left side?
I've manage to accomplish two out of three scenarios (the third being the one I need):
Regular trimming
<TextBlock VerticalAlignment="Center" Width="80" TextTrimming="WordEllipsis" Text="A very long text that requires trimming" /> // Result: "A very long te..."
Left trimming
<TextBlock VerticalAlignment="Center" Width="80" FlowDirection="RightToLeft" TextTrimming="WordEllipsis" Text="A very long text that requires trimming." /> // Result: "...A very long te"
Left trimming where the end of the text is seen
// Desired result: "...uires trimming"
Does anyone know if this is possible? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您不关心省略号,而只想在文本被截断时看到文本的结尾而不是开头,则可以将 TextBlock 包装在另一个容器中,并将其 HorizontalAlignment 设置为 Right。这将按照您想要的方式将其切断,但没有椭圆。
If you don't care about the ellipses, but just want to see the end of the text instead of the beginning when it gets cut-off, you can wrap the TextBlock inside another container, and set its HorizontalAlignment to Right. This will cut it off just like you want, but without the elipse.
您无法开箱即用地执行此操作,但我可以想到可能有效的两件事:
1)为 TextBlock 创建一个名为 LeftTrimmingText 之类的附加属性。然后,您将设置此属性而不是 Text 属性。例如,
附加属性将计算实际可以显示多少个字符,然后相应地设置 TextBlock 的 Text 属性。
2) 创建您自己的类来包装 TextBlock,并添加您自己的属性来处理所需的逻辑。
我认为第一个选择更容易。
You can't do this out-of-the-box, but I can think of two things that might work:
1) Create an attached property for TextBlock called something like LeftTrimmingText. Then, you would set this property instead of the Text property. E.g.
The attached property would calculate how many characters could actually be displayed, and then set the Text property of the TextBlock accordingly.
2) Create your own class which wraps a TextBlock, and add your own properties to take care of the required logic.
I think the first option is easier.
这种风格就可以完成这项工作。诀窍是重新定义标签的控制模板。然后将内容放入剪贴画布内并与画布右侧对齐。内容的最小宽度是画布的宽度,因此如果有足够的空间,内容文本将左对齐,而在剪切时将右对齐。
如果内容的宽度大于画布,则会触发省略号。
这里有几个实用程序类
GteConverter
这
是
它的工作原理。
This style will do the job. The trick is to redefine a control template for the label. The content is then put inside a clipping canvas and aligned to the right of the canvas. The minimum width of the content is the width of the canvas so the content text will be left aligned if there is enough space and right aligned when clipped.
The ellipses is triggered to be on if the width of the content is bigger than the canvas.
There are a couple of utility classes here
GteConverter
which is
and
Here is it working.
我不知道这是否是一个拼写错误,但您缺少“所需结果”末尾的
句号
。我假设你不想要它。由于您知道应该显示多少个字符,因此您可以获取整个字符串的子字符串并显示它。例如,如果您不知道预先需要多少个字符,那么您可以执行计算来确定它。在您的示例中,
80
的宽度会产生17
个字符,如果宽度发生变化,您可以使用该比率。I don't know if it's a typo, but you're missing the
full stop
at the end of your 'desired result'. I'll assume you don't want it. Since you know how many characters should be displayed, you could just get a substring of the whole string and display it. For example,If you don't know how many characters you want in advanced, then you can perform a calculation to determine it. In your example, a width of
80
results in17
characters, you can use that ratio if the width changes.