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

时间:2014-04-09 17:24:54

标签: c# wpf button window mouseevent

由于Window鼠标按下处理程序中的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");
    }
}

1 个答案:

答案 0 :(得分:0)

  

The Button handler doesnt work because of the DragMove call

实际上,它不起作用,因为第一次触发是Button.Click处的事件,当它起作用时,它会与以下事件冲突:MouseLeftButtonDown,MouseUp,MouseDown和路由事件{ {1}}属性默认为 false

要使这项工作,你需要定义一个e.Handled事件,但它是一个隧道事件,这意味着它将落在PreviewMouseDown层次结构中,因此它在之前触发泡泡事件。

示例:

VisualTree

XAML

<Window x:Class="MyProject.MainWindow" ... PreviewMouseDown="Window_PreviewMouseDown" ... />

Code-behind