10

コントロールが ZIndex を尊重しない理由を理解しようとしています。

例 1 - 正常に動作します

   <Canvas>
       <Rectangle Canvas.ZIndex="1" Height="400" Width="600" Fill="Yellow"/>
       <Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
   </Canvas>

例 2 - 機能しない

   <Canvas>
       <WebBrowser Canvas.ZIndex="1" Height="400" Width="600" Source="http://www.stackoverflow.com"/>
       <Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
  </Canvas>

ありがとう、 -- エド

4

6 に答える 6

22

残念ながら、これは WebBrowser コントロールが Internet Explorer COM コントロールのラッパーであるためです。これは、独自の HWND を取得し、WPF がその上に何も描画できないことを意味します。WPF で他の Win32 または WinForms コントロールをホストするのと同じ制限があります。

MSDNには、WPF/Win32 相互運用に関する詳細情報があります。

于 2008-09-17T13:41:55.763 に答える
5

最も一般的には「空域問題」と呼ばれる一般的な WPF の落とし穴に遭遇しています。考えられる解決策は、WebBrowser コントロールを使用せず、代わりに少しクレイジーなもの、つまり、WPF に直接レンダリングする埋め込み WebKit ブラウザーを使用することです。これを行うパッケージが 2 つあります。Awesomonium (商用) および Berkelium (オープンソース)。これら両方の .NET ラッパーがあります。

于 2010-11-17T14:21:30.113 に答える
3

次に示すように、SetWindowRgn を非表示にすることで、重なり合う領域を偽造することができます。

于 2009-05-07T17:18:45.463 に答える
1

WPF アプリケーションでサードパーティの WinForms コントロールをホストしていた同様の問題を解決しました。WinForms コントロールをメモリにレンダリングし、ビットマップに描画する WPF コントロールを作成しました。次に、OnRender メソッドで DrawImage を使用して、レンダリングされたコンテンツを描画します。最後に、マウス イベントをコントロールからホストされたコントロールにルーティングしました。Web ブラウザーの場合は、キーボード イベントもルーティングする必要があります。

私の場合はかなり簡単でした。単純なマウス操作によるグラフです。Web ブラウザー コントロールには、私が考慮していない他の問題がある可能性があります。とにかく、それが役立つことを願っています。

于 2008-09-17T20:14:54.197 に答える
1

私もこの問題にぶつかりました。私の場合、画像を 1 つのパネルから WebBrowser にドラッグしていましたが、もちろん、画像がブラウザに移動するとすぐに非表示になりました。

現在、次のソリューションに取り組んでいます。

  1. 画像のドラッグが開始されたら、「RenderTargetBitmap」を使用して WebBrowser のビットマップを作成します。
  2. ウェブブラウザと同じ幅/位置を使用して、ビットマップをキャンバスに追加します
  3. webControl.Visibility = Visibility.Hidden.
  4. ドラッグを離したら、ビットマップを削除し、webControl.Visibility = Visible に設定します。

この解決策は私の状況に非常に固有のものですが、いくつかのアイデアが得られるかもしれません。

于 2010-04-03T19:02:49.007 に答える