我有一个第三方应用程序,它调用一个简单的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()
}`
答案 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,这似乎解决了这个问题。