我写了一些代码来描述我的问题: 单击主窗口上的控件时,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>
在消息循环为空之前不要关闭对话框窗口:
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();
}