[WPF Bug清单]之(6)——Button的IsCancel属性失效
在上一篇中,描述了模態(tài)對話框隱藏之后變成了非模態(tài)的Bug,很多人回復(fù)表示這不算是一個Bug,我也表示理解。Bug只有在需求之下才有意義,不同的需求,對Bug的界定也不一樣。作為一個Framework,.NET只能做到在多數(shù)時候是符合最廣泛群體的需求的,就可以說它合格。但是對于前一篇描述的問題,想補充一下自己的考慮。
?
Window的Show和ShowDialog,用于將窗體展現(xiàn)(我沒有用顯示)出來,而Close用于關(guān)閉。Close之后就不能再用Show或是ShowDialog再次將窗體展現(xiàn)出來,否則會拋出異常,所以5樓的gboxcc回復(fù)的是錯的。很同情這位gboxcc,因為他認(rèn)為我說錯的那句,恰恰是我寫過代碼驗證過的。
?
如果想隱藏而不關(guān)閉一個窗體,顯然用Close是不行的。而且還要把所有的Close事件Cancel掉,保證窗體不會被Close,然后只能用Visibility 將窗體隱藏起來。隱藏之后,如果要將窗體再次顯示出來,我的第一感覺是用Visibility,但是發(fā)現(xiàn)不行。
?
從這個角度而言,Window類,Show/Close只在開始和結(jié)束的時候調(diào)用,因為它們不能交替調(diào)用;在窗體Show之后,用Visibility控制其可見性,因為可見性可以隨意交替設(shè)置的。我認(rèn)為這才是一個非常自然的事情。但是Window的實際情況是,Visibility的設(shè)置,會使isShowingDialog變量的值發(fā)生變化,單從需求上講,這是不應(yīng)該的。所以將其做為一個Bug提了出來。Colin Han認(rèn)為這是“為了更好地用戶體驗,專門做出的設(shè)計。”,我亦不以為然。而且我感覺微軟的UX團隊與開發(fā)團隊的溝通還很不充分,比如我在另一篇文章中提到的WPF的Window,沒有提供一個屬性來設(shè)置一個窗體是否顯示Icon,這本身就不符合微軟自己的UX Guide。
?
回復(fù)的人一致認(rèn)為,再次顯示這個窗體時也應(yīng)該用ShowDialog。好,這篇文章就是為次而生的。因為用ShowDialog將窗體再次顯示出來同樣有問題。連代碼都不用改,直接用上次的代碼就可以重現(xiàn)這個問題。使用ShowDialog方法將一個窗體再次顯示出來之后,窗體上的”Hide Self”按鈕失效了。注意是再次,第一次ShowDialog出來時的行為是正常的。
?
這里順便介紹一下IsCancel屬性,MSDN上對它的解釋如下:獲取或設(shè)置一個,該值指示Button是否是一個“取消”按鈕。用戶可以通過按ESC鍵激活“取消”按鈕。其實我感覺這句話對于新手而言實在是沒有什么幫助。好像就告訴別人這個屬性就是給Button加了個ESC鍵作為快捷鍵。必須要和MSDN上的很多文檔合起來看才知道這個IsCancel按鈕在不同環(huán)境下分別起什么作用,其實還不如自己寫個代碼試一下來得方便。
?
對于示例中的代碼而言,IsCancel就相當(dāng)于讓當(dāng)前窗體關(guān)閉。這是給窗體添加一個關(guān)閉按鈕最簡單的方式(沒有之一)。因為這個Bug用的就是上一篇的代碼。所以就不給大家貼圖了。自己運行一下吧。邏輯如下:
?
1.?????? 點擊示例中的Show Model Dialog按鈕——顯示一個模態(tài)對話框。
2.?????? 可以用Hide Self關(guān)閉彈出框。
3.?????? 再用Show Model Dialog彈出這個對話框。
4.?????? 那個Hide Self按鈕不再起作用了。
?
同系列的其它文章:
[WPF Bug清單](序)與之(1)——可以多選的單選ListBox
[WPF Bug清單]之(2)——RadioButton的IsChecked綁定失效
[WPF Bug清單]之(3)——暗中創(chuàng)建文件的打開文件對話框
[WPF Bug清單]之(4)——點擊RadioButton的空白沒有反應(yīng)
[WPF Bug清單]之(5)——隱藏模態(tài)對話框后變成非模態(tài)
[WPF Bug清單]之(7)——頑固的Error Template
[WPF Bug清單]之(8)——RowDefinition中MaxHeight在一定條件下失效
[WPF Bug清單]之(9)——消失的光標(biāo)
?
我是MS Fan,但是我依然會以挑剔的眼光看它;只因為我是MS Fan的原因是,從多數(shù)開發(fā)和娛樂和應(yīng)用的角度而言,MS是目前最好的選擇。如果有一天Linux的哪個發(fā)行版在多數(shù)方面超過了MS,我會義無反顧地投入Linux。不過是一個平臺,不是女友,也不是“知已者”,不需要相守一生。
總結(jié)
以上是生活随笔為你收集整理的[WPF Bug清单]之(6)——Button的IsCancel属性失效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16:9或4:3,哪种屏幕宽高比更适合用
- 下一篇: Silverlight 2.0学习笔记—