簡體   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