【问题标题】:Edit RichTextBox Run element without splitting into multiple Run elements [closed]编辑 RichTextBox Run 元素而不拆分为多个 Run 元素 [关闭]
【发布时间】:2021-02-15 00:17:20
【问题描述】:

我有一个带有RichTextBox 的 WPF 应用程序。文本框中的文本由跨度以编程方式构建并运行到一个段落。每个句子都是一个Span。句子中的每个单词都是Run。用户可以编辑文本。

RichTextBox 看起来像这样

<RichTextBox x:Name="txtRichSpeech">
    <FlowDocument x:Name="txtRichSpeechDoc">
        <Paragraph x:Name="txtRichSpeechContent"></Paragraph>
    </FlowDocument>
</RichTextBox>

文本“这只是一个测试文本。”会有结构

<Span>
    <Run>This</Run>
    <Run> </Run>
    <Run>is</Run>
    <Run> </Run>
    <Run>just</Run>
    <Run> </Run>
    <Run>a</Run>
    <Run> </Run>
    <Run>test</Run>
    <Run> </Run>
    <Run>text.</Run>
</Span>

当用户通过在中间添加 E 来编辑单词“test”时,我希望 &lt;Run&gt;test&lt;/Run&gt; 变为 &lt;Run&gt;teEst&lt;/Run&gt; 但我得到以下结构:

<Span>
    <Run>This</Run>
    <Run> </Run>
    <Run>is</Run>
    <Run> </Run>
    <Run>just</Run>
    <Run> </Run>
    <Run>a</Run>
    <Run> </Run>
    <Run>te</Run>
</Span>
<Run>E</Run>
<Span>
    <Run>st</Run>
    <Run> </Run>
    <Run>text.</Run>
</Span>

我怎样才能防止这种行为并且只拥有&lt;Run&gt;teEst&lt;/Run&gt;

【问题讨论】:

    标签: c# wpf richtextbox flowdocument


    【解决方案1】:

    Paste() 方法用于将剪贴板的内容粘贴到RichTextBox 中时,会发生此行为。要防止这种行为,请使用InsertTextInRun() 方法:

    txtRichSpeech.CaretPosition.InsertTextInRun(Clipboard.GetText()); 
    

    将在当前插入符号位置插入文本。仅当插入符号不受 Run 元素限定时,Run 才会与文本数据一起插入。

    编辑

    此行为的另一个原因是 RichTextBox 控件的语言与当前输入语言不同。将RichTextBoxLanguage 属性设置为当前区域设置的语言(输入语言)可以解决问题。瑞典语示例:

    <RichTextBox x:Name="txtRichSpeech" Language="sv-SE">
    </RichTextBox>
    

    【讨论】:

    • 谢谢,但我没有粘贴。我只是通过设置插入符号位置(鼠标单击)并输入一个字母来进行编辑。
    • @Andreas:这很奇怪。因为当我在test 单词中的te 之后键入E 时,它不会拆分&lt;span&gt;E 英文字母?您是否在 RichTextBox 中有其他影响格式的事件句柄?
    • @Andreas:如果所有文本都是英文并且您输入E,但使用另一种语言,这肯定会发生。
    • @Andreas:因此,可以在没有&lt;Span&gt; 的情况下对内联元素进行分组。在大多数情况下,使用 &lt;Paragraph&gt; 会做同样的标记。
    • 问题出在语言上!设置RichTextBoxLanguage 属性时,它按预期工作。我离那个解决方案还很远。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多