2013-02-06 60 views
1

在WPF應用程序中,我想在加載窗口a時將窗口b顯示爲窗口a中的對話框。 我用下面的僞代碼做到這一點:WPF - window.ShowDialog窗口內。加載

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

This works。但是,它顯示窗口b,窗口a不顯示,直到我關閉窗口b。我想完全顯示窗口a,然後窗口b。我怎麼做到這一點?

回答

0

它是因爲在WindowA的加載事件中,它執行WindowB的ShowDialog(),然後隱藏WindowA中的所有代碼,直到WindowB關閉。如果你只是WindowB.Show(),你應該看到WindowA被加載。您可能需要混淆Window.Focus()和/或Window.TopMost屬性,具體取決於您希望窗口彼此之間顯示的方式。

還有一個Window.ContentRendered事件而不是Window.Loaded事件可能在您的解決方案幫助

+0

Window.ContentRendered它是!謝謝。 – laconicdev

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

此外,如果不想使用t他XAML,這也很完美。

public WindowA() 
    {  
     this.Activated += Window_Activated_1; 
    }