当.ShowDialog()处于活动状态时,Application.Current.Activated不会触发

时间:2014-01-09 18:57:47

标签: wpf events modal-dialog window

当我点击任何一个窗口时,我正在使用Application.Current.Activated将所有窗口置于前面。这工作得很好,但是当我使用.ShowDialog()

打开模态对话框时不起作用

单击应用程序的其他窗口(除了对话框)不会导致应用程序被激活。默认行为是什么都不做。 (点击似乎完全是 IGNORED!

  • 如何点击应用程序的任何窗口,将打开的对话框置于最前面? (预期的行为基于每个应用程序的工作原理)

是:我确实将对话框的所有者设置为我的MainWindow,然后点击主窗口会产生所需的结果,但点击任何其他窗口都不会做任何事情。

代码:
创建一个新的WPF项目并添加两个窗口 然后在MainWindow上放一个按钮。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Window1 foo = new Window1();
        foo.Show();
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window2 modal = new Window2();
        modal.Owner = this;
        modal.ShowDialog();
    }
}

要查看我在说什么,请单击按钮打开模式对话框 单击MainWindow时会发生所需的行为 我想在单击Window1时发生同样的事情。

1 个答案:

答案 0 :(得分:0)

AFAIK,一个模态对话框(.ShowDialog()触发器)阻止所有其他窗口,从而阻止激活事件。

根据MSDN:

实例化Window类时,默认情况下不可见。 ShowDialog显示窗口,禁用应用程序中的所有其他窗口,并仅在窗口关闭时返回。这种类型的窗口称为模态窗口。

http://msdn.microsoft.com/en-us/library/system.windows.window.showdialog(v=vs.110).aspx

这可能是一个丑陋的黑客,但也许你可以通过在一个单独的线程上创建你的模态窗口来完成你需要的东西,从而让你的主应用程序继续处理激活(和其他)事件?你需要一种方法来阻止第二个模态对话框中的两个打开。