2009-09-07 42 views
6

WPFユーザーコントロール(ElementHostの子)からモーダルウィンドウを表示し、モーダルウィンドウの所有者/親をフォームコントロールを含むコントロールに設定することは可能ですか?WPF ShowDialogとElementHost

OwnerプロパティがWindowのインスタンスをとるので、これを行うことはできません。私はこれを古いWindowsフォームフォームコントロールであるElement Hostコントロールの親に設定する必要があります。回避策や代替アプローチがあるかどうかは疑問です。

問題は、モーダルウィンドウが表示され、ユーザーが別のアプリケーションに切り替えた後にもう一度戻ると、モーダルウィンドウが非表示になり、ユーザーがメインウィンドウとやりとりできなくなることです。これは、モーダルウィンドウがオーナー/ペアレント関係が設定されていないため、表示されていないときに表示されているとWindowsが考えているためです。

乾杯、 James。

答えて

8

私はこのようにその問題を解決するためにWindowInteropHelperを使用しています:

var wpfDialog = new MyWpfDialog(); 
var interopHelper = new WindowInteropHelper(wpfDialog) 
     { 
      Owner = winFormsDialog.Handle 
     }; 

wpfDialog.ShowDialog(); 
+0

こんにちは、ありがとうございます。私の問題を解決しました。 – ayc

4

を、私はこの記事が古いですけど、私がホストしているWinフォームのウィンドウを見つけるために道に出くわしましたElementHostは、winformウィンドウにアクセスできないwpf UserControlのコンテキストから取得します。私はこれが有用であることがわかったので、私はホストウィンドウを通過させる必要はありません。


HwndSource winformWindow = (System.Windows.Interop.HwndSource.FromDependencyObject(wpfControlInElementHost) as System.Windows.Interop.HwndSource); 
if (winformWindow != null) 
{ 
    var interopHelper = new WindowInteropHelper(wpfWindow) 
    { 
     Owner = winformWindow.Handle 
    }; 
} 
関連する問題