WPF窗口隐藏在主应用程序窗口后面。试图把它带到前面

时间:2017-05-19 05:28:24

标签: c# wpf

我有一个第三方应用程序,它调用一个简单的WPF窗口,它有一个启动另一个WPF窗口的按钮。

MainApp -> Window1 -> Window2

设置代码的方式Window1应该在启动Window2后关闭,它运行良好,但是Window2在MainApp窗口“后面”,因此不可见。这就是我想要解决的问题

我尝试过的事情:

Window.TopMost:这很好,但问题是当我Alt-Tab时窗口停留在所有窗口的顶部。

Activate()\Focus():这些不起作用

我还尝试发送一个Alt-Tab按键,似乎解决了这个问题,除了Window1根本没有关闭。

我甚至试过来自不同SO帖子的Activate()\Focus()\TopMost的组合,但似乎没有任何效果。

代码:

`void btn_click()   // Window1
{
    Myclass.ShowMyDialog();
    res = DialogResult...
    Close();
}

// Myclass
public static void ShowMyDialog()
{
    s_window2 = new Window2();
    s.window2.Closed += OnClosed;
    s_window2.Show()
}`

2 个答案:

答案 0 :(得分:0)

所有者财产应该做到这一点。请尝试以下代码:

    public MainWindow()
    {
        InitializeComponent();            
        this.Loaded += MainWindow_Loaded;                        
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Window1 win1 = new Window1();    //In your case, object of window2            
        win1.Owner = Application.Current.MainWindow;
        win1.Show();
    }

答案 1 :(得分:0)

好的..这就是我解决这个问题的方法。问题是,当我启动主应用程序(第三方)然后加载窗口1时,它是Modal,因此阻止第三方加载(文档)。我从Window 1打开我的Window 2,然后关闭Window 1.由于它们在同一个线程中,Window1将控制权返回给主应用程序(它来到前面并继续加载)因此Window2“隐藏”了。 作为一个解决方案,我现在在另一个线程中启动Window 2,这似乎解决了这个问题。