WPF - window.Loaded中的window.ShowDialog

时间:2013-02-06 15:18:20

标签: wpf wpf-controls

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用已激活的事件,而不是已加载

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

答案 1 :(得分:0)

因为在WindowA的load事件中,它执行WindowB的ShowDialog(),然后在WindowA中关闭所有代码直到WindowB关闭。如果你只做WindowB.Show(),你可能应该看到WindowA被加载。您可能需要弄乱Window.Focus()和/或Window.TopMost属性,具体取决于您希望窗口如何相互显示。

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