今天接到好友一个很有意思的BUG~~事情是这样的 在一个WPF程序中拖入一个TextBox
然后在TextChanged  加入一个      MessageBox.Show(" ");(随便弹出什么内容都可以)
有意思的来了
  当你输入英文时候很OK没有问题 当你输入中文就会弹出
NullReferenceException{"未将对象引用设置到对象的实例。"}。

奇怪 - - 我的TextBox 明明还在的 
不死心 继续尝试别的,发现复制中文上去不会出现这样的BUG,继续不断尝试 发现了一个很有意思的东西

在输入中文时UndoAction 变化是先
成员Create 然后Merge 
MSDN UndoAction 枚举  

撤消堆栈是如何引起的或如何受文本更改影响。


成员名称说明
None 此更改根本不会影响撤消堆栈
Merge 此更改将合并到以前的撤消单元中
Undo 此更改是调用 Undo() 的结果
Redo 此更改是调用 Redo() 的结果
Clear 此更改将清除撤消堆栈
Create 此更改将创建新的撤消单元
这里 猜测 可能我们在输入中文时候是Create其撤销单元 index=0, 然后发生了Merge 可是以前并没有 撤销单元 所以才会 出现这个异常? 知道的高手请赐教下

知道问题就好解决了只需要在TextBox 加入UndoLimit="0" 禁用撤销功能就不会出现异常了 可是这样有带来新的问题 文本框不能撤销 +_+

不知道有木有人能解决这个问题 或有更好的解决方案
 posted on 2011-07-25 16:55  沐訫  阅读(3816)  评论(3)    收藏  举报