美文网首页
三、控制窗口

三、控制窗口

作者: 安静的程序员 | 来源:发表于2020-07-25 04:29 被阅读0次

    一、拖动窗口
    Windows命名空间中,有一个拖动窗口的方法:DragMove(),鼠标按住标题栏时,调用此方法,即可拖动窗口。
    我猜测该方法的工作原理:调用该方法时,会通知系统开始拖动窗口,系统根据鼠标的偏移来移动窗口,松开鼠标时,系统自动关闭拖动模式。

    需要注意,调用该方法前,必须确保鼠标左键被按下。判断鼠标左键是否按下,有三种方式:
    01.直接判断鼠标左键是否按下
    if (Mouse.LeftButton == MouseButtonState.Pressed)
    02.在鼠标按下事件中,判断是否为左键触发的事件
    if (e.ChangedButton == MouseButton.Left)
    03.添加左键按下事件
    LeftButtonDown(object sender, MouseButtonEventArgs e)
    我使用第三种方式,将判断的工作交给系统。

    我们先创建一个方法,用于添加窗口的所有控制事件:

    private void AddWindowControlEvent()
    {
    }
    

    在创建窗口样式时,已经为标题栏确定了名称。这样便可通过GetTemplateChild()方法查找标题栏,从而添加事件:

    ((TextBlock)GetTemplateChild("TitleBar")).MouseLeftButtonDown += TitleBar_LeftButtonDown;
    

    在事件中,只需添加一行代码:

    private void TitleBar_LeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DragMove();
    }
    

    接下来,在窗口加载时,添加窗口控制事件。WPF中,所有控件都有一个加载完成事件,我们先在MainWindow.xaml文件中添加事件:



    编辑事件:

    private void Window_Loaded(object sender, RoutedEven-tArgs e)
    {
        AddWindowControlEvent();
    }
    

    启动后,在标题栏上按下鼠标左键,便可拖动窗口了。
    由于没有禁用窗口的缩放,将窗口拖动至屏幕顶端时,会最大化窗口,任务栏都被挡住了,而且窗口边缘会被屏幕吃掉一部分,至今我都搞不清楚这被吃掉的部分尺寸是如何计算的,所以,最简单粗暴的方法就是:禁用窗口缩放,顺便将窗口启动位置修改为屏幕中心:


    二、最小化与关闭窗口

    使用同样的方法,为最小化按钮和关闭按钮添加单击事件:

    ((Button) GetTemplateChild("MinButton")).Click += MinButton_Click;
    ((Button) GetTemplateChild("CloseButton")).Click += ButtonClose_Click;
    

    事件实现:

    // 最小化窗口
    private void MinButton_Click(object sender, RoutedEventArgs e)
    {
        WindowState = WindowState.Minimized;
    }
    // 关闭窗口
    private void ButtonClose_Click(object sender, RoutedEventArgs e)
    {
        Close();
    }
    

    再次运行,窗口就可以正常拖动、最小化以及关闭了。
    项目链接:https://pan.baidu.com/s/1-NQHm0FmSIpeldaM3OFi6A
    提取码:otx6

    相关文章

      网友评论

          本文标题:三、控制窗口

          本文链接:https://www.haomeiwen.com/subject/gauulktx.html