11

私の WPF/C# アプリでは、次のようなコードを使用してダイアログ ウィンドウを作成しています。

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

ダイアログの所有者を別のアプリケーション ウィンドウの hWnd に設定するにはどうすればよいですか?

私が必要とする機能は、ダイアログが表示されている間、「所有者ウィンドウ」をブロックすることです。

4

2 に答える 2

16

使用WindowInteropHelper:

Window dialog = new MyDialog();
WindowInteropHelper wih = new WindowInteropHelper(dialog);
wih.Owner = ownerHwnd;
dialog.ShowDialog();
于 2012-12-12T15:25:57.677 に答える
10

「所有者ウィンドウ」をブロックする解決策を見つけました。コードの最初の部分は Douglas の回答からのもので、残りは 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);
于 2012-12-12T16:33:58.430 に答える