2012-12-12 16 views
9

W moim WPF/C# aplikacji tworzę okno dialogowe przy użyciu kodu jak poniżej:Set Window.Owner użyciu hWnd

Window dialog = new MyDialog() as Window; 
dialog.Owner = Window.GetWindow(this); 
dialog.ShowDialog(); 

Jak mogę ustawić właściciela dialogowego HWND innego okna aplikacji?

Funkcjonalność, której potrzebuję, polega na zablokowaniu okna Właściciel, gdy okno dialogowe jest widoczne.

Odpowiedz

9

znalazłem rozwiązanie do zablokowania "właściciel Okno". Pierwsza część kodu jest od Douglas odpowiedzi, reszta jest za pomocą połączenia metody WinAPI EnableWindow:

Window dialog = new MyDialog(); 
WindowInteropHelper wih = new WindowInteropHelper(dialog); 
wih.Owner = ownerHwnd; 

//Block input to the owner 
Windows.EnableWindow(ownerHwnd, false); 

EventHandler onClosed = null; 
onClosed = (object sender, EventArgs e) => 
{ 
    //Re-Enable the owner window once the dialog is closed 
    Windows.EnableWindow(ownerHwnd, true); 

    (sender as Window).closed -= onClosed; 
}; 

dialog.Closed += onClosed; 
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; 
dialog.ShowActivated = true; 
dialog.Show(); 

//Import the EnableWindow method 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnableWindow(IntPtr hWnd, bool bEnable); 
14

Zastosowanie WindowInteropHelper:

Window dialog = new MyDialog(); 
WindowInteropHelper wih = new WindowInteropHelper(dialog); 
wih.Owner = ownerHwnd; 
dialog.ShowDialog(); 
+1

ten pracuje ustawić właściciela, ale niestety nie blokuje wejście użytkownika do okna. Czy jest jakiś sposób na zrobienie tego? – Drahcir