c# - 编辑 RichTextBox Run 元素而不拆分为多个 Run 元素
问题描述
我有一个带有RichTextBox
. 文本框中的文本由跨度以编程方式构建并运行到一个段落。每个句子都是一个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”时,我想<Run>test</Run>
变成这样<Run>teEst</Run>
,但我得到了以下结构:
<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>
我怎样才能防止这种行为,只是有<Run>teEst</Run>
?
解决方案
当Paste()
用于将剪贴板内容粘贴到RichTextBox
. 要防止这种行为,请使用以下InsertTextInRun()
方法:
txtRichSpeech.CaretPosition.InsertTextInRun(Clipboard.GetText());
将在当前插入符号位置插入文本。仅当插入符号不受Run
元素范围限制时,Run
才会将 a 与文本数据一起插入。
编辑
此行为的另一个原因是RichTextBox
控件的语言与当前输入语言不同。将 的Language
属性设置RichTextBox
为当前区域设置的语言(输入语言)可以解决问题。瑞典语示例:
<RichTextBox x:Name="txtRichSpeech" Language="sv-SE">
</RichTextBox>
推荐阅读
- php - Laravel where 在控制器的更新语句中
- android - Kotlin 处理程序类:如何在满足条件时从 run() 内部停止线程?
- c# - 有两个不同的依赖程序集但具有相同的公钥令牌是否正常?
- python - 如何通过请求从自定义表单的输入文本字段中获取值:Django 3.0?
- javascript - 如果选择了按钮,则 jQuery 显示/隐藏选项
- laravel - 在laravel中提交后打印结果
- python-3.x - 创建一对连续的时间列表
- php - Laravel 部署:PHP 错误无法加载动态库“pdo_pgsql”
- vuejs2 - 从数据库读取数组后如何触发手表?
- axapta - 对象引用未设置为对象实例,订单未同步到 ERP。有人知道这个问题吗?