一、拖动窗口
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
网友评论