質問

コントロールが 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>

ありがとう、 - 編

役に立ちましたか?

解決

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

MSDN WPF/Win32 相互運用に関する詳細情報を参照してください。

他のヒント

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

次に示すように、SetWindowRgn を使用して、重複領域を非表示にして偽装することができます。

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

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

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

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

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

この解決策は私の状況に非常に具体的ですが、おそらくいくつかのアイデアが得られるでしょう。

この構造を使用してこれを解決できました。各要素のプロパティ構成を確認してください。

<Canvas ClipToBounds="False">
     <Popup AllowsTransparency="True" ClipToBounds="False" IsOpen="True">
         <Expander>
            <Grid x:Name="YourContent"/>
         </Expander>
     <Popup>
</Canvas>

Expander を管理してコンテンツを表示または非表示にするだけです。私はメニュー バーに使用しています。場合によっては Expander はオプションだと思います。

結果を含むこの図を確認してください。Web ブラウザの上やメイン ウィンドウの外側にコントロールを表示することもできます。

enter image description here

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top