WPF 3.5的RichTextBox在处理汉字时的小BUG
近来打算封装WPF 中的RichTextBox(.NET 3.5 SP1,在Visual studio 2008 Sp1下)为一个简易文本编辑器,发现了其在处理汉字中存在的一些小问题。
(下文均假设光标所在处文本原先没有粗体特性,并且没有选中任何文本)。
比如要输入粗体文字,在没有选中文本的情况下,压Ctrl+B切换为粗体之后,如果接着输入英文字符,则会以粗体显示,这是正确的,但如果输入的是汉字,则汉字不会变为粗体。
在Windows Form版本中RichTextBox则无此问题。不知为何微软的测试工程师会漏掉了这么明显的问题。
我还试验了一下英文句子和中文句子。 当光标位于一个英文单词内时,压Ctrl+B整个单词会切换到粗体。而对于汉字则无反应。估计RichTextBox在设计时为了支持英文单词的自动抽取,将汉字将其看成是英文单词的另一种“分界符”而不予处理。
这问题能否弥补?
我尝试着想直接通过操纵其底层的FlowDocument来解决这个问题,仔细查看了RichTextBox生成的FlowDocument,发现RichTextBox把每个设为粗体的文本都自动抽取为一个独立的Run元素,而当取消粗体时,会将这一Run元素与其相邻的Run元素合并(如果相邻的Run元素没有设为粗体的话)。
再试验粗体与斜体等复合模式时,我发现了一个规律:RichTextBox会在其文本格式或内容更改时,自动合并其样式一致的相邻的Run元素,还会自动删除为空的Run元素。真可谓相当智能。
RichTextBox内部还定义了自己的命令绑定对象响应EditingCommands.ToggleBold等命令,直接捕获Ctrl+B快捷键。
由此可见,要解决这个问题,必须干预Run元素的分分合合,同时还要处理鼠标和键盘等输入捕获事件,其工作量还真不是几个小时就能搞掂的。最终我决定放弃了,这个问题看上去不大,但要处理起来还真麻烦。
这个Bug不知在以后的版本中是否会更正。不知其他朋友是否也发现了这个问题,有无简便的法子解决?
分享到:
相关推荐
RichTextBox控件中显示HTML格式数据
WPF 中使用RichTextBox控件开发的类似Notepad的小程序.
wpf原生richtextbox支持文字上标下标
wpf RichTextBox文本编辑器,可实现打开保存,添加图片,处理字符等 自己摸索出来的,有问题欢迎提出来。一起改进
wpf ,richtextbox,wpf 操作richtextobx
RichTextBox和行号有关的技术难点,实现richtextbox添加行号
WPF自制RichTextBox文本编辑器,利用了命令,RichTextBox的一些常用属性。实现基本常用的编辑功能
基于WPF的richtextbox控件,按格式导入导出word文档内容
简单日志记录,界面使用RichTextBox记录日志,根据日志级别显示日志内容不同的颜色,同时使用log4net记录本地文件日志。
这个是真的完美.我尝试过很多方法都不成功.呵呵,最后还是找到了.
NULL 博文链接:https://syxc.iteye.com/blog/719183
WPF中richtextbox知识点总结richtextbox知识点总结richtextbox知识点总结richtextbox知识点总结richtextbox知识点总结
wpf读取richTextBoxwpf读取richTextBoxwpf读取richTextBoxwpf读取richTextBoxwpf读取richTextBox
这个是经过整理的例子,原来的例子比较复杂。
文档编辑功能,全选菜单this.richTextBox1.SelectAll();复制菜单this.richTextBox1.Copy();剪切菜单this.richTextBox1.Cut();粘贴菜单this.richTextBox1.Paste();C#源代码
wpf在RichTextBox中添加控件未启用
C# 在richtextbox中生成表格 ,在richtextbox中画表格,共享给大家,不错的东东
实例用的VS2010编写的,简单易懂,直接调用方法。再不懂就要自己找原因了。
网上找到的WPF版HTML编辑器都是基于web browser控件,它在WPF中存在AllowsTransparency问题。...源码来自于codeproject,原版不支持中文汉字,中文会变成乱码还报错。 我做了小修改,全部改为UTF-8编码。
wpf实现的文本编辑器,用richtextbox,附加一个toolbar工具栏