2012-12-12 29 views
9

Trong WPF/C# ứng dụng của tôi tôi là tạo ra một cửa sổ hộp thoại sử dụng mã như dưới đây:Set Window.Owner sử dụng hWnd

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

Làm thế nào tôi có thể thiết lập các chủ sở hữu thoại đến hWnd của cửa sổ ứng dụng khác?

Chức năng mà tôi cần chỉ để chặn "Cửa sổ chủ sở hữu" trong khi hộp thoại hiển thị.

Trả lời

9

Tôi đã tìm thấy một giải pháp để ngăn chặn việc "Chủ cửa sổ". Phần đầu tiên của mã là từ Douglas câu trả lời, phần còn lại được sử dụng một cuộc gọi đến phương pháp 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

Sử dụng WindowInteropHelper:

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

này đang nỗ lực để thiết lập các chủ sở hữu, nhưng tiếc là nó không chặn người dùng nhập vào phía cửa sổ. Có cách nào làm được việc này không? – Drahcir