【发布时间】:2021-12-28 05:36:03
【问题描述】:
我的目标是双击“i.a.”的整个部分像这样:
但是 WPF 的默认设置是单独选择字符串的每个部分:
示例:
<RichTextBox>
<FlowDocument>
<Paragraph>Reason for contact: i.a.</Paragraph>
</FlowDocument>
</RichTextBox>
从用户的角度来看,文本中可能包含或不包含用于突出显示关键词的格式,但为了简化“i.a.”。我认为不会涉及任何格式。整个“word”可以被格式化,但不像“i”是红色的,“a”是蓝色的。
到目前为止我发现了什么
我尝试使用SpellCheck.CustomDictionaries,单词选择不受这些影响。
TextEditorMouse 类负责在调用 IsAtCaretUnitBoundary 的 SetCaretPositionOnMouseEvent 中启动选择以检查单词边界,但我无法理解 TextPointer 的魔力。对我来说,似乎没有办法解决这个问题,因为它受到私有和内部方法的保护。
通过查看对System.Windows.Documents.TextPointerBase.GetWordRange(System.Windows.Documents.ITextPointer thisPosition, System.Windows.Documents.LogicalDirection direction)4的调用,我怀疑CaretPosition中的TextPointer参与了前进和后退:
System.Windows.Documents.TextPointer selectionStart = rtb.CaretPosition;
while (selectionStart.GetPointerContext(LogicalDirection.Backward) != TextPointerContext.Text)
{
selectionStart = selectionStart.GetNextContextPosition(LogicalDirection.Backward);
}
System.Windows.Documents.TextPointer selectionEnd = rtb.CaretPosition;
while (selectionEnd.GetPointerContext(LogicalDirection.Forward) != TextPointerContext.Text)
{
selectionEnd = selectionEnd.GetNextContextPosition(LogicalDirection.Forward);
}
【问题讨论】:
-
但是你已经得到了回答:stackoverflow.com/questions/69975808/…。您不能/不知道如何将它用于 RichTextBox?
-
@Auditive 这两个控件在文本选择方面的行为非常不同
标签: c# wpf richtextbox