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

本文关键字:设置 文本 WPF RichTextBox | 更新日期: 2023-09-27 18:20:58

我正在扩展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的,其余的是针对预设文本的。

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

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

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

这将插入符号设置在正确的方向,防止BOLD设置在Run对象中继续。

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

这将在位于Paragraph对象末尾的新Bold对象的末尾添加Run对象。

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