WPF窗口隐藏在主应用程序窗口后面。尝试将其置于前台。

3
我有一个第三方应用程序,调用一个简单的WPF窗口,该窗口有一个按钮,可以启动另一个WPF窗口。 MainApp -> Window1 -> Window2 代码的设置方式是,在启动Window2后关闭Window1,这一点正常运行良好,但是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()
}

尝试使用 window.BringIntoView(); - Raviraj Palvankar
也尝试过那个...没有起作用。 - ababeel
ShowDialog()方法调用的其中一个窗口是哪个? - Adwaenyth
@Rekshino 我也尝试了那些解决方案,但并没有起到帮助的作用。 - ababeel
2个回答

3

使用所有者属性应该可以解决问题。请尝试以下代码:

    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();
    }

当window1关闭后,你会显示window2,对吗? - Naresh Ravlani
请展示一下你调用Window2的.Show()方法的代码好吗? - Naresh Ravlani

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接