WPF 鼠标事件从子窗口传播到所有者窗口

问题描述 投票:0回答:1

我写了一些代码来描述我的问题: 单击主窗口上的控件时,MouseLeftButtonDown 命令将子窗口显示为模式窗口。 当双击子窗口时,主窗口中的 MouseLeftButtonUp 被触发。 如何在没有标志的情况下避免这种情况?

主要

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void MouseLeftButtonDownCommand(object sender, MouseButtonEventArgs e)
    {
        ChildWindow childWindow = new ChildWindow();
        childWindow.Owner = this;
        childWindow.ShowDialog();
    }

    private void MouseLeftButtonUpCommand(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show("Event Propagated to main window");
    }
}

主要XAML

<Grid>
    <Canvas Background="Transparent" MouseLeftButtonDown="MouseLeftButtonDownCommand" MouseLeftButtonUp="MouseLeftButtonUpCommand">
        
    </Canvas>
</Grid>

模态窗口

public partial class ChildWindow : Window
{
    public ChildWindow()
    {
        InitializeComponent();
    }

    private void LeftDoubleClickCommand(object sender, MouseButtonEventArgs e)
    {
        this.Close();
    }
}

模态窗口XAML

<Grid>
    <ListView Margin="10" MouseDoubleClick="LeftDoubleClickCommand">
        <ListViewItem Content="Coffie"></ListViewItem>
        <ListViewItem Content="Tea"></ListViewItem>
        <ListViewItem Content="Orange Juice"></ListViewItem>
        <ListViewItem Content="Milk"></ListViewItem>
        <ListViewItem Content="Iced Tea"></ListViewItem>
        <ListViewItem Content="Mango Shake"></ListViewItem>
    </ListView>
</Grid>
wpf mouseevent showdialog
1个回答
0
投票

在消息循环为空之前不要关闭对话框窗口:

private void LeftDoubleClickCommand(object sender, MouseButtonEventArgs e)
{
    Dispatcher.BeginInvoke(() => this.Close(), System.Windows.Threading.DispatcherPriority.Background);
}

或将事件标记为已处理:

private void LeftDoubleClickCommand(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
    this.Close();
}
© www.soinside.com 2019 - 2024. All rights reserved.