7

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

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

問題は、モーダル ウィンドウが表示されているときにユーザーが別のアプリケーションに切り替えた後、再び戻ると、モーダル ウィンドウが非表示になり、ユーザーがメイン ウィンドウを操作できないことです。これは、所有者/親の関係が設定されていないため、ウィンドウが表示されていない場合でも、モーダル ウィンドウがまだ表示されていると Windows が認識しているためです。

乾杯、ジェームズ。

4

3 に答える 3

9

私は WindowInteropHelper を使用して、次のようにその問題を解決しています。

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

wpfDialog.ShowDialog();
于 2009-09-30T12:23:43.680 に答える
5

この投稿が古いことは知っていますが、winform ウィンドウにアクセスできない可能性がある wpf UserControl のコンテキストから、ElementHost をホストしている winform ウィンドウを見つける方法を見つけました。ホストウィンドウをあちこちに渡す必要がないように、これは便利だと思いました。


HwndSource winformWindow = (System.Windows.Interop.HwndSource.FromDependencyObject(wpfControlInElementHost) as System.Windows.Interop.HwndSource);
if (winformWindow != null)
{
   var interopHelper = new WindowInteropHelper(wpfWindow)
   {
      Owner = winformWindow.Handle
   };
}
于 2011-03-03T00:12:45.203 に答える
2

OK、WindowInteropHelper を使用して解決策を見つけました。

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/44c903fb-9514-401c-ba85-58acd5293c1b

于 2009-09-07T03:54:06.343 に答える