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

时间:2015-11-06 04:46:06

标签: c# wpf richtextbox textrange

我正在扩展WPF Richtextbox的功能。当我输入时,我希望某些文本变为粗体。我能够将某些文本变为粗体,但粗体字后面的文本也会变得粗体...

以下是我的代码示例:

void BoxApp::makeVertex()
{
    Vertex vertices[] =
    {
        { XMFLOAT3(-1.0f, -1.0f, -1.0f), (const XMFLOAT4)Colors::White },
        { XMFLOAT3(-1.0f, +1.0f, -1.0f), (const XMFLOAT4)Colors::Black },
        { XMFLOAT3(+1.0f, +1.0f, -1.0f), (const XMFLOAT4)Colors::Red },
        { XMFLOAT3(+1.0f, -1.0f, -1.0f), (const XMFLOAT4)Colors::Green },
        { XMFLOAT3(-1.0f, -1.0f, +1.0f), (const XMFLOAT4)Colors::Blue },
        { XMFLOAT3(-1.0f, +1.0f, +1.0f), (const XMFLOAT4)Colors::Yellow },
        { XMFLOAT3(+1.0f, +1.0f, +1.0f), (const XMFLOAT4)Colors::Cyan },
        { XMFLOAT3(+1.0f, -1.0f, +1.0f), (const XMFLOAT4)Colors::Magenta }
    };
    rotating_angle += 0.01;
    for (int i = 0; i < 8; i++) {
        XMStoreFloat3(&vertices[i].pos, XMVector3Transform(XMLoadFloat3(&vertices[i].pos),
            XMMatrixTranslation(0.0f, 1.0f, 1.0f) *
            XMMatrixRotationX(rotating_angle) *
            XMMatrixTranslation(0.0f, -1.0f, -1.0f)
        ));
    }

    D3D11_BUFFER_DESC vbd;
    ... #Set BUFFER_DESC
    D3D11_SUBRESOURCE_DATA vinitData;
    ... #Set SUBRESURCE
    md3dDevice->CreateBuffer(&vbd, &vinitData, &mBoxVB);
}

我想:

NOTBOLDED NOTBOLDED BOLDED NOTBOLDED

但我得到的是:

NOTBOLDED NOTBOLDED BOLDED NOTBOLDED

**请注意,输入时会变粗。

如何阻止粗体字后的文字变粗体?

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:1)

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