在 WPF 应用程序中,我想在加载窗口 a 时将窗口 b 显示为窗口 a 内的对话框。我使用以下伪代码执行此操作:
window a.Loaded += WindowALoaded();
WindowALoaded
{
window b.ShowDialog();
}
这行得通。但是,它显示窗口 b,并且在我关闭窗口 b 之前,窗口 a 不会显示。我想完全显示窗口a,然后显示窗口b。我将如何做到这一点?
在 WPF 应用程序中,我想在加载窗口 a 时将窗口 b 显示为窗口 a 内的对话框。我使用以下伪代码执行此操作:
window a.Loaded += WindowALoaded();
WindowALoaded
{
window b.ShowDialog();
}
这行得通。但是,它显示窗口 b,并且在我关闭窗口 b 之前,窗口 a 不会显示。我想完全显示窗口a,然后显示窗口b。我将如何做到这一点?
您可以使用Activated事件而不是Loaded
<Window x:Class="WpfApplication.WindowA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowA" Height="300" Width="300"
Activated="Window_Activated_1" >
(...)
</Window>
在你的代码后面:
private void Window_Activated_1(object sender, EventArgs e)
{
WindowB windowB = new WindowB();
windowB.ShowDialog();
}
此外,如果不想使用 XAML,这也很有效。
public WindowA()
{
this.Activated += Window_Activated_1;
}
这是因为在 WindowA 的加载事件中,它执行 WindowB 的 ShowDialog(),然后将 WindowA 中的所有代码拖到 WindowB 关闭之前。如果您只执行 WindowB.Show(),您可能会看到 WindowA 被加载。您可能需要弄乱 Window.Focus() 和/或 Window.TopMost 属性,具体取决于您希望窗口如何在彼此之上显示。
还有一个 Window.ContentRendered 事件而不是 Window.Loaded 事件,这可能有助于您的解决方案