1

在 WPF 应用程序中,我想在加载窗口 a 时将窗口 b 显示为窗口 a 内的对话框。我使用以下伪代码执行此操作:

window a.Loaded += WindowALoaded();
WindowALoaded
{
  window b.ShowDialog();
}

这行得通。但是,它显示窗口 b,并且在我关闭窗口 b 之前,窗口 a 不会显示。我想完全显示窗口a,然后显示窗口b。我将如何做到这一点?

4

2 回答 2

2

您可以使用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;
    }
于 2013-02-06T15:33:13.620 回答
0

这是因为在 WindowA 的加载事件中,它执行 WindowB 的 ShowDialog(),然后将 WindowA 中的所有代码拖到 WindowB 关闭之前。如果您只执行 WindowB.Show(),您可能会看到 WindowA 被加载。您可能需要弄乱 Window.Focus() 和/或 Window.TopMost 属性,具体取决于您希望窗口如何在彼此之上显示。

还有一个 Window.ContentRendered 事件而不是 Window.Loaded 事件,这可能有助于您的解决方案

于 2013-02-06T15:25:52.843 回答