• 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         }

    总结: 笔者愚钝,以上实现方法有点恶心。但只有实现功能,总是好的。希望园友能给出更好的解决方案。

    作者:Bonker
    出处:http://www.cnblogs.com/Bonker
    QQ:519841366
           
    本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
  • 相关阅读:
    UML类图学习总结
    Java和C# RSA加解密相互通信和使用公钥加密传输
    C#des加密算法指定键的大小对于此算法无效
    WCF--找不到具有绑定 BasicHttpBinding 的终结点的与方案 https 匹配的基址。注册的基址方案是 [http]。
    IIS7 使用server farms 进行负载均衡
    iis7 未注册framework4 导致 莫名的404错误
    启用代理导致 有道云笔记未知错误、网络错误和OneDrive断线
    AspNetCore发布到Centos7
    c# 操作临时数据---XML操作
    c# 获取程序目录
  • 原文地址:https://www.cnblogs.com/Bonker/p/2778655.html
Copyright © 2020-2023  润新知