2008-09-17 23 views
10

私はコントロールがZIndexを尊重しない理由を理解しようとしています。WPF 3.5 WebBrowserコントロールと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> 

おかげで、 動作しません - エド

答えて

21

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

MSDNはWPF/Win32の相互運用に関するより多くの情報を持っています。

1

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

私のケースはかなり簡単でした。マウスのやりとりが簡単なグラフでした。 Webブラウザコントロールには、私が考慮しなかった他の問題があるかもしれません。とにかく助けてくれることを願っています

3

あなたがここに示したように、それを非表示にすることで、偽の重複領域をSetWindowRgnことができます:あなたはまた、上に何かフロートを持つように透明ポップアップコントロールを使用することができます

+1

@Ricky - 批評をありがとう。私はこの言葉を将来誤用しないようにしていきます。私は、オブジェクト指向プログラミングの文脈で使用されるとき、wordメソッドとのあいまいさのために、プログラミングを議論するときにwordメソッドを使用することを避けようとしています。私は、より良い言葉があるのだろうかと思います。 – jpierson

3

Webブラウザーコントロールの詳細情報とコードサンプルはhereです。

+4

私はポップアップが気に入らないのは、別のアプリケーションに切り替えても、あなたの画面上に留まる傾向があり、あなたのアプリケーションには添付されていないように見えるので、あなたのアプリケーションのサイズ変更/移動時にポップアップはそれ。 – Rachel

1

私もこの問題にぶつかりました。私の場合、1つのパネルからWebブラウザーに画像をドラッグしていましたが、もちろん、画像がブラウザーに移動するとすぐ隠されました。画像のドラッグを開始すると同じ幅/場所を使用して、キャンバスに自分のビットマップを追加

  • 「RenderTargetBitmap」を使用してWebブラウザーのビットマップを作成し、

    1. :現在、以下のソリューションに取り組んで

      ウェブブラウザ

    2. webControl.Visibility = Visibility.Hidden。
    3. ドラッグを解除したら、ビットマップを削除してwebControl.Visibility = Visibleを設定します。

    この解決策は私の状況に非常に特有ですが、多分それはあなたにいくつかのアイデアを与えるでしょう。

  • 4

    あなたは「The Airspace Problem」と呼ばれる共通のWPF落とし穴に遭遇しています。可能な解決策は、WebBrowserコントロールを使用せずに、ちょっとクレイジーなもの、つまり組み込みのWebKitブラウザを直接WPFにレンダリングすることです。これを行う2つのパッケージがあります。 Awesomonium(商業)とBerkelium(オープンソース)。これらの両方の.NETラッパーがあります。

    1

    私は、各要素のプロパティの設定をチェックし、この構造を使用することによってこの問題を解決するために管理:

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

    あなたは自分のコンテンツを表示または非表示にするエクスパンダを管理する必要が、私はそれを使用していますメニューバー、私はエキスパンダーは場合によってはオプションだと思います。

    が結果とこの写真をチェックアウト、あなたもWebブラウザーの上に、さらには、メインウィンドウの外あなたのコントロールを表示することができます。

    enter image description here

    関連する問題