繁体   English   中英

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

[英]Draggable Borderless Window and Button click handler in WPF

由于Windows鼠标按下处理程序中的DragMove调用,因此Button处理程序不起作用。 有什么办法让事件冒泡吗? 我尝试将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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM