如何在RichTextBox中添加省略号(...)

3

我想在富文本框中添加省略号(..)。

在普通的TextBlock中,TextTrimming="WordEllipsis"属性可以限制长度以允许省略号表示,但是富文本框却没有这个属性。现在只能在富文本框中实现,而文本块则不行。

我想要通过两三行进行裁剪,并添加省略号(..)选项。有什么好的方法吗?

我想向您展示我如何使用RichTextBox,但我的声望很低。


1
虽然 TextBlock 旨在显示文本,但任何 TextBox 都旨在编辑文本。编辑未完整呈现的文本实际上并不起作用,因此似乎您想要显示文本,但出于某种原因,您更喜欢在 RichTextBox 中这样做...能否解释一下做出这个决定的背景? - grek40
可能是TextBox TextTrimming的重复问题。 - Walt Ritscher
@grek40 您是正确的,我可以使用 TextBlock 来实现。但是我正在使用支持包含格式化文本的 RichTextBox。因此,我们使用保存在数据库中的 rtf 文本格式来完成此操作,并且它会保留所有格式,我不知道 TextBlock 是否很容易支持文本格式。现在已经使用了 RichTextBox,将其替换为 TextBlock 将非常困难,因此请建议使用 RichTextBox 完成此操作的任何方法。 - Kang Dong Gyun
1个回答

1

你不需要

省略号的概念,正如grek40所说,只适用于显示文本的情况。 例如,假设省略号被显示出来,用户尝试在你的RichTextBox中部分选择一些文本,包括省略号,那么选择的结果会是什么?你无法确定。

或许

由于省略号通常是滚动条的替代品,隐藏文本而不是允许您通过滚动访问它,因此您可以使用WPF样式来模拟它。 创建一个样式,在Scrollbar visibility trigger触发时显示省略号的图标/图片(放置位置由您决定)。一旦省略号可见,您需要禁用Scrollbar。 这显然需要比简单设置属性更多的工作,并且如果没有仔细实现,很容易成为用户体验的噩梦,所以请注意。

注意:另一个评论(由Walt Ritscher)链接到一个类似的问题,那里的解决方案与这个类似。

另一种可能

另一种伪造省略号的方法是使用两个不同的RichTextBox控件。 第一个RichTextBox将设置ReadOnlytrue。将文本削减到允许的最大长度,附加省略号并在此第一个RichTextBox中显示它。 当用户需要编辑文本时,隐藏第一个RichTextBox并显示包含整个文本的第二个RichTextBox

请查看我上面的评论。 - Kang Dong Gyun
@KangDongGyun,你没有提供任何关于你问题的新细节。RichTextBoxTextBox(不是TextBlock)都不支持省略号。不能使用TextBlock因为它不支持RichTextBox的特殊文本格式,而你需要这个。你只能通过某种方法来解决,就像我已经说过的那样。 - r41n
@KangDongGyun 我增加了另一种选择,实现起来应该会更容易。不过仍然只是一个hack而已。 - r41n
1
我已经知道这通常很难实现。感谢您的良好反馈。我非常满意您友善的解释。 - Kang Dong Gyun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接