WPF中的可拖动无边界窗口和按钮单击处理程序
本文关键字:按钮 单击 处理 程序 窗口 边界 拖动 WPF | 更新日期: 2023-09-27 17:57:33
Button处理程序不工作,因为在Window鼠标向下处理程序中调用了DragMove。有什么办法可以让事件冒泡吗?我尝试将e.Handled
设置为false,但它不起作用。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();
e.Handled = false;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Console.WriteLine("zde");
}
}
The Button handler doesnt work because of the DragMove call
实际上,它不起作用,因为第一个激发是Button.Click
上的一个事件,当它起作用时,它会与以下事件发生冲突:MouseLeftButtonDown、MouseUp、MouseDown,对于路由事件,默认情况下e.Handled
属性为false。
为了实现这一点,您需要定义一个PreviewMouseDown
事件,但它是一个Tunnel事件,这意味着它将从VisualTree
层次结构中删除,因此它在Bubble事件之前被触发。
示例:
XAML
<Window x:Class="MyProject.MainWindow"
...
PreviewMouseDown="Window_PreviewMouseDown" ... />
Code-behind
private void Window_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
this.DragMove();
}