如何让WPF弹出窗口不被隐藏在主应用程序后面?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让WPF弹出窗口不被隐藏在主应用程序后面?相关的知识,希望对你有一定的参考价值。
在WPF应用程序中,我有弹出窗口实例的按钮。
- 我单击第一个按钮,第一个窗口在主应用程序前面正确弹出。
- 我单击第二个按钮,第二个窗口在主应用程序前面正确弹出。但是,第一个窗口现在移动到主应用程序后面。这是令人困惑和意外的,因为它经常在主应用程序的中间,因此它似乎消失,直到用户移动主应用程序以发现它隐藏在后面。
这是XAML:
<Window x:Class="TestPopupFix.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="600" Width="800">
<StackPanel>
<Button Content="Open first popup" Click="Button_OpenFirst"/>
<Button Content="Open second popup" Click="Button_OpenSecond"/>
</StackPanel>
</Window>
而这背后的代码:
private void Button_OpenFirst(object sender, RoutedEventArgs e)
{
Window window = new Window();
TextBlock tb = new TextBlock();
tb.Text = "This is the first window.";
window.Content = tb;
window.Width = 300;
window.Height = 300;
window.Show();
}
private void Button_OpenSecond(object sender, RoutedEventArgs e)
{
Window window = new Window();
TextBlock tb = new TextBlock();
tb.Text = "This is the second window.";
window.Content = tb;
window.Width = 300;
window.Height = 300;
window.Show();
}
当我弹出新窗口时,我需要做些什么来使主应用程序保持最后的状态?
答案
要在可视层次结构中排列窗口,您必须将子窗口的Owner
属性设置为父窗口。
您可以阅读更多关于the Owner
property on MSDN的信息。
您应该将代码更改为类似于此的代码:
Window parentWindow;
private void Button_OpenFirst(object sender, RoutedEventArgs e)
{
this.parentWindow = new Window();
this.parentWindow.Owner = this;
this.parentWindow.Show();
}
private void Button_OpenSecond(object sender, RoutedEventArgs e)
{
Window childWindow = new Window();
childWindow.Owner = this.parentWindow;
childWindow.Show();
}
另一答案
我遇到了同样的问题,但是在WinForms表单中托管了一个WPF窗口。在这种情况下,设置所有者让我成为了我的一部分,但偶尔它仍然落后。
我最后做的除了那个是在WPF窗口上连接Loaded
事件并调用Activate
如下:
_window.Loaded += (s, e) => _window.Activate();
以上是关于如何让WPF弹出窗口不被隐藏在主应用程序后面?的主要内容,如果未能解决你的问题,请参考以下文章