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

C# 在WPF RichTextBox中将特定文本设置为粗体,c#,wpf,richtextbox,textrange,C#,Wpf,Richtextbox,Textrange,我正在扩展WPF Richtextbox的功能。我希望某些文本在输入时变为粗体。我能够将某些文本改为粗体,但粗体字后面的文本也会变为粗体 以下是我的代码示例: private bool _Running = false; void CustomRichTextBox_TextChange(object sender, TextChangedEventArgs e) { if(_Running) return; _Running = true; //Log

我正在扩展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;
}
我想:

不加粗不加粗加粗不加粗

但我得到的是:

不加粗不加粗加粗不加粗

**请注意,它在键入时变为粗体

如何防止粗体字后面的文本也变为粗体



不重复问题,因为所提供链接的公认解决方案是针对WinForms的,其余的是针对预设文本的。

您需要检测所需文本何时不再被检测到,可能是出现空格,然后删除粗体值并将其重置为正常值。

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

CaretPosition = CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
这会将插入符号设置为正确方向,防止粗体设置在运行对象中继续

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

这将向位于段落对象末尾的新加粗对象的末尾添加一个Run对象。

检测每个字符是否加粗将耗费大量性能。有其他选择吗?可能重复的