1

OpenFileDialogの所有者を設定したいのですが(ネームスペース内でMicrosoft.Win32はありません)、ウィンドウのハンドル ( IntPtrSystem.Windows.Forms )しか持っていません (ハンドルはアプリケーションからのものである必要はなく、外部のものである可能性があります)。

それは可能ですか、それともからOpenFileDialogSystem.Windows.Formsを使用する必要がありますか?

を呼び出す効果が欲しい

protected abstract bool RunDialog(IntPtr hwndOwner);

基本クラスCommonDialog内にありますが、保護されています。回避策はありますか?リフレクションを使用してこのメ​​ソッドを取得して実行できますか、それとも「よりクリーンな」方法がありますか?

通常のShowDialog()方法では a のみが許可されますがWindow、これは私が持っていないものです。

このコードを使用して、ハンドルしかないときに他のウィンドウの所有者を設定しますが、のコンストラクターはWindowInteropHelperのみを受け取り、から継承WindowCommondDialogませんWindow

Window window;
IntPtr ownerHwnd;
var wih = new WindowInteropHelper(window);
wih.Owner = ownerHwnd;
4

1 に答える 1

1

この質問は、スタック オーバーフローの質問と重複していると思われますが、簡単な検索で明らかに一致する候補が見つかりませんでした。そう…

のプロパティ値を にキャストWindowすることで、WPF オブジェクトを取得できます。RootVisualHwndSourceWindow

Window IntPtrToWindow(IntPtr hwnd)
{
    HwndSource hwndSource = HwndSource.FromHwnd(hwnd);

    return (Window)hwndSource.RootVisual;
}

詳細については、 HwndSource クラスを参照してください。

于 2015-07-08T17:29:58.023 に答える