1

これが私が達成しようとしていることです-子WebアプリケーションをホストできるWPFでMDIアプリケーションを作成すること。Web アプリケーションをレンダリングするために WPF Web ブラウザー コントロールを使用しています。WPF は本質的に MDI アプリケーションをサポートしていないようです。そのため、少し検索した結果、UI コントロールを使用してウィンドウをシミュレートし、WPF キャンバス内でそれらを管理するこのプロジェクトを見つけました。このアプローチは、webbrowser コントロール オブジェクトを MDI 子として追加し始めるまでは、うまく機能しているようです。

Web ブラウザー コントロールを MDI 子として追加すると、他の MDI 子コントロールを含む他の WPF 要素の上に常に表示されます (以下を参照)。私が理解していることから、webbrowser コントロールは常に、ウィンドウ (およびポップアップ) を除く他の WPF オブジェクトの上に表示されます。それが本当であると仮定すると、問題の重複を避けるために実際の WPF ウィンドウを使用する必要があると思います。

ここに画像の説明を入力

私が今考えることができる唯一の解決策は、WPF ウィンドウを HwndHost オブジェクト内にラップし、それを MDI 子として追加することです。ただし、子ウィンドウにはタイトル バーを設定できないようです。つまり、以下に示すように、ダミーのタイトル バー領域 (実際のウィンドウのタイトル バーと同じ) と実際のコンテンツ領域 (Web ブラウザー コントロールを表示) を持つウィンドウが必要です (赤い枠は HwndHost オブジェクトです)。

ここに画像の説明を入力

このアプローチは、重複の問題を解決するようです。次に試す必要があるのは、ユーザーがダミーのタイトル バーをクリックして、キャンバス要素内に MDI ウィンドウをドラッグできるようにすることです。

質問 -

  1. WPF webbrowser コントロールのオーバーラップ動作についての私の理解は正しいですか? そうでない場合、何が欠けていますか?
  2. 2番目のアプローチは、私が望むものを達成するための正しい方向への一歩ですか? はいの場合、HwndHost のドラッグ動作を実装するにはどうすればよいですか?
  3. 私が試すことができる他の代替ソリューションはありますか?

ノート:

  1. 多くの人が MDI は洗練されたソリューションではないと考えていますが、私には選択の余地がありません。(タブ付きウィンドウ/ドッキング可能ウィンドウなどの代替ソリューションを試しましたが、好評ではありませんでした)

  2. 私は相互運用プログラミングにまったく慣れておらず、概念をよく理解していません。私が物事を誤解している場合は、私を修正してください。

ありがとう!

4

0 に答える 0