首先聲明一下:有人早就發現了這個問題,發過了帖子,也已經有微軟的人說這是“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>
TextBox要設置為Wrap使其自動換行。
重現Bug的步驟如下:
圖1. 運行程序
圖2. 輸入很多字母
圖3. 將光標放到行首
圖4. 輸入空格,光標不見了
光標不可見,其實還是存在的,只是跑到了第一行的行尾。這就是微軟的人說的“by design”的行為的後果。
如果大家試著改一下窗體的大小,比如改成200,那麼最後一步輸入一個空格之後,光標的確還是可見的,多輸入幾個空格就又看不見了。這是字體大小與窗體寬度的比例問題造成的。
而且重現上面的問題,也並不需要這麼多步驟,只要在文本框裡輸入足夠多的空格就會有問題——根本原因就在於空格不會被Wrap。
不知道微軟為什麼會這麼做?但是相信用戶在文本框輸入著東西,突然發現光標看不到了,絕對不會覺得很自然。而且WinForm的TextBox是沒有這個問題。
不知道微軟的這個by design是作何考慮的?大家覺得呢?