C# 如何防止对话框多次打开?
我在两个选项卡中有一个数据网格。因此,当第二个选项卡单击时,应该会打开一个过滤器窗口(不是C# 如何防止对话框多次打开?,c#,wpf,mvvm,C#,Wpf,Mvvm,我在两个选项卡中有一个数据网格。因此,当第二个选项卡单击时,应该会打开一个过滤器窗口(不是,而是)。我是这样做的 if (tabControl1.SelectedIndex == 1) { DashboardFilterView filterWindow = new DashboardFilterView(); filterWindow.ShowDialog(); } 当我点击窗口的关闭按钮时,它被关闭 问题: 关闭弹出窗口后,若我单击当前选项卡中的d
,而是
)。我是这样做的
if (tabControl1.SelectedIndex == 1) {
DashboardFilterView filterWindow = new DashboardFilterView();
filterWindow.ShowDialog(); }
当我点击窗口的关闭按钮时,它被关闭
问题:
关闭弹出窗口后,若我单击当前选项卡中的datagrid行,将再次显示弹出窗口
如何防止这种情况发生一次以上?由于
选项卡控制1\u selection changed
事件为偶数网格行单击触发,我添加了一个检查以确认此事件是否从选项卡中发生
e.OriginalSource是TabControl
解决了这个问题
private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.OriginalSource is TabControl)
{
if (tabControl1.SelectedIndex == 0)
{
// Do something
}
else if (tabControl1.SelectedIndex == 1)
{
DashboardFilterView filterWindow = new DashboardFilterView();
filterWindow.ShowDialog();
}
}
}
你到底想做什么?第二次你不想打开一个弹出窗口?你如何处理选项卡点击?在网格行点击我不需要再次打开弹出窗口,这是一个单独的动作,还有一个奇怪的行为,这只会发生在第一次点击网格行时,在那个之后,点击网格行的行为和往常一样。我不确定我是否正确理解了你们的问题,但可能有一个默认值为true的布尔值。当您单击并且值为true时,将弹出窗口并将值设置为false。更改选项卡时,将该值再次设置为true。就我个人而言,我会检查你正在尝试做什么,并重新设计你的界面,而不是使用这样的逻辑。你在哪里调用这些代码?在TabControl的鼠标事件处理程序中?只是出于好奇。在网格行单击时作为
e.OriginalSource
传递的是什么?当网格行单击e.OriginalSource
isDataGrid
时,您的答案为路由事件提供了一个很好的解决方法。我想另一个解决方案是处理DataGrid.SelectionChanged
并将其设置为handled,但如果有多个控件触发此事件,则这是一种过度杀伤力。