2009-09-18 153 views
2

在WPF應用程序中,我有彈出窗口實例的按鈕。如何使WPF彈出窗口不會隱藏在主應用程序後面?

  • 我點擊第一個按鈕,第一窗口在主應用程序的正確彈出。
  • 我點擊第二個按鈕,第二個窗口彈出正確正面的主要應用程序。但是,第一個窗口現在移動後面的主要應用程序。這是令人困惑和意外的,因爲它經常位於主應用程序的中間,因此似乎消失了,直到用戶移動主應用程序以找到它隱藏在後面。

alt text http://i28.tinypic.com/jqjkfp.jpg

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

什麼我必須做的,使主要應用當我彈出新窗口時,保持最遠距離?

回答

12

要在視覺層次結構中安排窗口,必須將子窗口的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(); 
} 
+0

優秀的,這是它 –

+0

我一直在Z-胡鬧訂單的時間比我想要承認的要長,而這最終是我的問題所在。謝謝。 –

+0

我已經把我的頭髮拉出了幾個小時。好答案。 – oscilatingcretin

6

我有同樣的問題,但在主辦一個WinForms形式WPF窗口。在這種情況下,設置店主讓我成爲了一部分,但偶爾它仍然落後。

我最終什麼事除了這樣做是在WPF窗口類設置Loaded事件,並呼籲Activate如下:

_window.Loaded += (s, e) => _window.Activate(); 
相關問題