silverlight 讓右上角關閉按鈕 無效


有一個需求,在彈出的頁面里,用戶沒有進行某個操作時,不允許退出彈出頁面。項目是silverlight做的。彈出頁面是個silverlight子窗口。vs會自動在頁面右上角有個X按鈕。

先上一段開始寫的屏蔽右上角關閉按鈕的代碼,為頁面添加closing事件。

 1  //關閉窗體
 2     private void ChildWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 3         {
 4               //判斷自己的關閉按鈕是否可用
 5             if (btnClose.IsEnabled == true)
 6             {
 7                 //將彈出頁面隱藏
 8                 this.Visibility = Visibility.Collapsed;
 9             }
10             else
11             {
12                 //阻止關閉事件
13                 e.Cancel = true;
14             }
15         }

 

以上代碼在winform和wpf里面滿足要求。讓頁面右上角的X關閉按鈕失效。

但在silverlight里面,e.Cancel = true;不能阻止頁面的關閉。


然后翻閱msdn。結論:在silverlight里面微軟為了防止惡意的流氓軟件。做了以下兩個限制。

1,開始運行silverlight程序,不能自動全屏。必須有第三方觸發的事件全屏代碼才有效。

2,彈出層的右上角X按鈕。后台取消關閉事件的代碼無效。即e.Cancel = true無效。

原來如此,這些是在一定程度上貌似阻止了流氓軟件,但卻給Coder們也造成了不小的壓力。 偶然一天,突然想到當silverlight程序在非調試情況下,如果程序出現異常,silverlight不會死掉(微軟的安全機制),而是執行到出現異常代碼的地方停止。不會造成界面的鎖定和死掉。那既然如此,為什么我們不用一個異常來阻止X按鈕的關閉事件呢?

 

修正后的代碼

 1 //關閉窗體
 2     private void ChildWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 3        {
 4             //判斷自己的關閉按鈕是否可用
 5          if (btnClose.IsEnabled == true)
 6            {
 7               //將彈出頁面隱藏
 8               this.Visibility = Visibility.Collapsed;
 9             }
10          else
11            {
12                 MessageBox.Show("您還有未完成的操作!");
13                //拋出一個異常,來阻止關閉事件
14                throw new Exception();
15             }
16         }

 


總結: 筆者愚鈍,以上實現方法有點惡心。但只有實現功能,總是好的。希望園友能給出更好的解決方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM