有一個需求,在彈出的頁面裡,使用者沒有進行某個操作時,不允許退出彈出頁面。項目是silverlight做的。彈出頁面是個silverlight子視窗。vs會自動在頁面右上角有個X按鈕。
先上一段開始寫的屏蔽右上角關閉按鈕的代碼,為頁面添加closing事件。
以上代碼在winform和wpf裡面滿足要求。讓頁面右上角的X關閉按鈕失效。
但在silverlight裡面,e.Cancel = true;不能阻止頁面的關閉。
然後翻閱msdn。結論:在silverlight裡面微軟為了防止惡意的流氓軟體。做了以下兩個限制。
1,開始運作silverlight程式,不能自動全屏。必須有第三方觸發的事件全屏代碼才有效。
2,彈出層的右上角X按鈕。背景取消關閉事件的代碼無效。即e.Cancel = true無效。
原來如此,這些是在一定程度上貌似阻止了流氓軟體,但卻給Coder們也造成了不小的壓力。 偶然一天,突然想到當silverlight程式在非調試情況下,如果程式出現異常,silverlight不會死掉(微軟的安全機制),而是執行到出現異常代碼的地方停止。不會造成界面的鎖定和死掉。那既然如此,為什麼我們不用一個異常來阻止X按鈕的關閉事件呢?
修正後的代碼
總結: 筆者愚鈍,以上實作方法有點惡心。但隻有實作功能,總是好的。希望園友能給出更好的解決方案。
QQ:519841366
本頁版權歸作者和部落格園所有,歡迎轉載,但未經作者同意必須保留此段聲明,
且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權利