首先声明一下:有人早就发现了这个问题,发过了帖子,也已经有微软的人说这是“by design”的行为。但是我依然对这个诡异的行为表示不可理解。所以发上来,看看大家的见解。
示例代码非常之简单。
<Window x:Class="HiddenCaret.DemoWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ResizeMode="NoResize" Title="Caret Gone"
Width="150" Height="100">
<TextBox TextWrapping="Wrap"/>
</Window>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ResizeMode="NoResize" Title="Caret Gone"
Width="150" Height="100">
<TextBox TextWrapping="Wrap"/>
</Window>
TextBox要设置为Wrap使其自动换行。
重现Bug的步骤如下:
图1. 运行程序
图2. 输入很多字母
图3. 将光标放到行首
图4. 输入空格,光标不见了
光标不可见,其实还是存在的,只是跑到了第一行的行尾。这就是微软的人说的“by design”的行为的后果。
如果大家试着改一下窗体的大小,比如改成200,那么最后一步输入一个空格之后,光标的确还是可见的,多输入几个空格就又看不见了。这是字体大小与窗体宽度的比例问题造成的。
而且重现上面的问题,也并不需要这么多步骤,只要在文本框里输入足够多的空格就会有问题——根本原因就在于空格不会被Wrap。
不知道微软为什么会这么做?但是相信用户在文本框输入着东西,突然发现光标看不到了,绝对不会觉得很自然。而且WinForm的TextBox是没有这个问题。
不知道微软的这个by design是作何考虑的?大家觉得呢?
同系列的其它文章:
[WPF Bug清单](序)与之(1)——可以多选的单选ListBox
[WPF Bug清单]之(2)——RadioButton的IsChecked绑定失效
[WPF Bug清单]之(3)——暗中创建文件的打开文件对话框
[WPF Bug清单]之(4)——点击RadioButton的空白没有反应
[WPF Bug清单]之(5)——隐藏模态对话框后变成非模态
[WPF Bug清单]之(6)——Button的IsCancel属性失效