WPF RichTextBox 标记化编辑

WPF RichTextBox tokenized editing

我正在尝试使用户能够使用 RichTextBox 控件编辑文本的特定部分(并且仅那些部分)。

我的方法包括使用 FlowDocumentInlineUIContainer 标签中包含的 TextBox 控件。下面的代码显示了我到目前为止所取得的成就:

<RichTextBox IsDocumentEnabled="True">
    <FlowDocument>
        <Paragraph>
            <InlineUIContainer >
                <TextBox Text="Field" MinWidth="65"></TextBox>
            </InlineUIContainer>
            <InlineUIContainer>
                <TextBlock Text="Some text..." ></TextBlock>
            </InlineUIContainer>
        </Paragraph>
    </FlowDocument>
</RichTextBox>

这个问题是用户能够 select FlowDocument 中的元素并删除它们...更糟糕的是,他们可以编辑 [=16] 中的任何文本=] 元素甚至文档中的 cut/paste 文本。

我想在 RichTextBox 上设置 IsReadOnly="True" 但这也禁止编辑 TextBoxes...我也可以处理 PreviewKeyDown 但不能处理所有情况(即: 右键单击​​并按粘贴)。

我想知道是否有任何替代解决方案,甚至是替代库或第三方控件可以提供帮助。

如何设置 TextBoxIsReadOnly 属性 为 false 和 [=15= 的 IsReadOnly 属性 ] 到 true?:

<RichTextBox IsDocumentEnabled="True" IsReadOnly="True">
    <FlowDocument>
        <Paragraph>
            <InlineUIContainer >
                <TextBox Text="Field" MinWidth="65" IsReadOnly="False"></TextBox>
            </InlineUIContainer>
            <InlineUIContainer>
                <TextBlock Text="Some text..." ></TextBlock>
            </InlineUIContainer>
        </Paragraph>
    </FlowDocument>
</RichTextBox>