wpf 双击事件及全屏和退出全屏

本文介绍了在WPF应用中如何处理窗口全屏和退出全屏的问题,特别是针对Win7环境下窗口自动全屏的解决办法。作者选择了不修改注册表,而是通过响应ESC键和双击标题栏的事件来手动控制全屏状态。文中讨论了MouseLeftButtonDown事件和双击事件的区别,并提供了实现双击全屏退出的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个新手,大家不要乱喷,高手勿进。嘿嘿
最近在做一个win7的cs软件,可是把窗口拖动到边框上就会让窗口全屏,并且不能自动退出全屏,没有办法就百度了,大概有两种方法,
1、就是修改注册表把win7的这个功能给禁用了,百度的例子很多,当时我也想用,想在程序启动的时候就后台修改注册表,来达到这样的目的。
2、就是响应一些事件,来手动退出,比如按下ESC,和双击标题栏来达到这样的效果,
我选择了第二种,因为修改注册表对于现在的杀毒软件是很难通过的可能影响程序的其它方面。
一开始想的是双击标题栏,我的标题是一个border,没有鼠标点击事件,可是却有一个MouseLeftButtonDown,这个事件,两者的区别就是事件发生的源不一样,解析不同
一个是MouseButtonEventArgs保存了鼠标按下的相关数据,而另一个却是RoutedEventArgs记录了路由的相关数据,都要实现双击自然也是有所不同的。
对于第一种我可以这样来做到

if (e.ClickCount == 2)
            {

            }

对于第二种我只能手动来加一个计时器来模拟这种效果

 int i = 0;

        void btn_Effection_Click(object sender, RoutedEventArgs e)
        {

            //i += 1;
            //System.Timers.Timer t = new System.Timers.Timer(600);
            //t.Interval = 600;

            //t.Elapsed += (s, ee) => { t.Enabled = false; i = 0; };
            //t.Enabled = true;
            //if (i % 2 == 0)
            //{
            //    t.Enabled = false;
            //    MessageBox.Show("双击");
            //    i = 0;
            //}

            //this.Topmost = true;
            //this.WindowStyle = System.Windows.WindowStyle.None;
            //this.WindowState = System.Windows.WindowState.Maximized;



        }

但是却都是可以都能达到相同的效果。
没有测量过效率的问题。
我还想过做强转,如下:

  private void btn_Effection_Click_1(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            MouseButtonEventArgs ms = e as MouseButtonEventArgs;
            if (ms.ClickCount == 2)
            {
                MessageBox.Show("这样可以");
            }


        }

可是没有效果会死掉,因为这样ms是没有得到任何值的


全屏,自然后台调用相关的窗口状态了。

        void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)//Esc键  
            {
                this.WindowState = System.Windows.WindowState.Normal;
                this.WindowStyle = System.Windows.WindowStyle.SingleBorderWindow;
            }
        }

可以根据自己的情况写窗口的状态,比如你自己的是无边框自己定义的窗口,那这样你就想好用SingleBorderWindow,因这样就会系统默认的状态给显示出来,要么你再把WindowsStyle改为None要不就不用不这样写了,直接更改窗口的状态,我就是这样写的,我当前不明白 为什么 要加下面的那句,话后,来去掉了也没有发现什么 问题,所以就没有加了,以后要是发现有问题,我再来更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值