在 WPF RichTextBox 中将特定文本设置为粗体

8
我正在扩展WPF RichTextBox的功能。我希望在键入特定文本时使其变粗。我能够让某些文本加粗,但是接下来的文本也会变得加粗...
以下是我的代码示例:
private bool _Running = false;
void CustomRichTextBox_TextChange(object sender, TextChangedEventArgs e)
{
    if(_Running)
        return;
    _Running = true;

    //Logic to see if text detected

    //Logic to get TextPointers

    //Logic to get TextRange
    var boldMe = new TextRange(textPointer1, textPointer2);
    //Bold text
    boldMe.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);

    _Running = false;
}

我想要的是:
NOTBOLDED NOTBOLDED BOLDED NOTBOLDED
但我得到的是:
NOTBOLDED NOTBOLDED BOLDED NOTBOLDED
请注意,在输入时,它会变成粗体。
如何防止粗体单词后面的文本也变成粗体?
这不是重复的问题,因为提供链接的已接受解决方案仅适用于WinForms,其余解决方案仅适用于预设文本。

可能是在TextBox中使特定文本加粗的方法的重复问题。 - Abhishek Dey
2个回答

3

经过多次测试,我找到了一个简单的解决方案。

CaretPosition = CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);

这会让光标以正确方向定位,防止加粗设置在 Run 对象内继续。

if(textPointerEnd.GetNextInsertionPosition(LogicalDirection.Forward) == null)
    new Run("", textPointerEnd);

这将在段落对象末尾创建一个新的加粗对象,并在其内部添加一个运行对象。


1
你需要检测到所需文本不再被检测到,可能是当出现空格时,然后去除加粗值并将其重置为正常状态。

检测每个字符是否为粗体将会消耗大量性能。有其他的替代方法吗? - SILENT

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