WPF如果控制每个窗体确保只打开一次

最近在用WPF写一个桌面应用程序,感觉这个东西很好用,果然很强大,但在应用的过程,碰到一个问题,找了很的网络资料都没有人仔细说说,我通过摸索找一个自己的解决方案,最终把问题解决了,现将个人的处理方式分享给大家,让碰到类似问题的朋友多一种参考.

        用C#开发桌面应用程序的时候,如果用mdi的模式,能够比较方便地控制每个窗体只能打开一次,如果已经打开则将其置为最前端窗口。但是wpf处理的时候好像不是这回事,我一时没找到一个比较好方法,(如果有朋友找到了更好的方法,望赐教和分享)我的处理过程如下:

在主窗体上点击菜单时,如果做到每个窗体不会被重复打开,如果打开了,可以将其重新获得焦点。

首先在主窗体中 将菜单关联的窗体 实例化,

 第二步:将每个菜单对应窗体的closing事件重写

        /// <summary>        
        /// 重写OnClosing事件 解决窗口关闭不能再开的bug。        
        /// </summary>        
        /// <param name="e"></param>        
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            this.Hide();
            e.Cancel = true;
        }

之所以要重写closeing事件,是因为在菜单对应的窗口关闭之后,再次打开就会报错:

所以需要将关闭事件重写。

第三步:在主窗体中菜单事件里面进行如下的判断处理

        private void MenuItem_Click(object sender, RoutedEventArgs e)

 


        {

            if (tMainWindow == null || tMainWindow.IsVisible == false)
            {
                tMainWindow.Show();
            }
            else
            {
                tMainWindow.Activate();
                tMainWindow.WindowState = System.Windows.WindowState.Normal;
            }
        }

其中的窗体就是前面实例化过的,当然也可以在主窗体中写一个方法,然后调用这个方法也行

 

如有朋友提供更好的方法,请分享谢谢!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值