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");
    }
}

WPF中的可拖动无边界窗口和按钮单击处理程序

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();
}