WPF 3.5 WebBrowser-Steuerelement und ZIndex
Ich versuche, herauszufinden, warum die Steuerung nicht Ehren ZIndex.
Beispiel 1 - die funktioniert einwandfrei
<Canvas>
<Rectangle Canvas.ZIndex="1" Height="400" Width="600" Fill="Yellow"/>
<Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
</Canvas>
2. Beispiel - welches nicht funktioniert,
<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>
Dank,
-- Ed
InformationsquelleAutor emsieja | 2008-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider ist dies, weil das WebBrowser-control ist ein wrapper für den Internet-Explorer-COM-Steuerelement. Dies bedeutet, dass es bekommt seine eigene HWND und nicht zulassen, WPF, etwas zu zeichnen über. Es hat die gleichen Einschränkungen wie hosting alle anderen Win32-oder WinForms controls in WPF.
MSDN mehr Informationen über WPF/Win32 interop.
InformationsquelleAutor Abe Heidebrecht
Sie laufen in eine gemeinsame WPF-Falle, die meisten gemeinhin als die "Luftraum-Problem". Eine mögliche Lösung ist, NICHT das WebBrowser-Steuerelement verwenden, und stattdessen gehen für etwas ein wenig verrückter - und zwar einen eingebetteten WebKit-browser Rendern direkt in WPF. Es gibt zwei Pakete, die dies tun; Awesomonium (commercial) - und Berkelium (open-source). Es gibt eine .NET wrapper für beide.
InformationsquelleAutor Armentage
Könnte man SetWindowRgn, um gefälschte der überlappende Bereich durch ausblenden es, wie hier gezeigt:
InformationsquelleAutor zproxy
Können Sie auch mit einem transparenten Popup-Steuerelement, um etwas schwimmen auf dem WebBrowser-Steuerelement. Mehr Informationen und ein code-Beispiel finden hier.
InformationsquelleAutor John Myczek
Löste ich ein ähnliches Problem, wo ich war, hosting eine 3rd-party-WinForms-Steuerelement in meiner WPF-Anwendung. Erstellt habe ich ein WPF-Steuerelement, das macht die WinForms-Steuerelement in den Speicher und dann Malt es in ein bitmap. Dann benutze ich DrawImage in der OnRender-Methode zum zeichnen der dargestellten Inhalte. Schließlich habe ich weitergeleitet Maus-Ereignisse aus meiner Kontrolle, um das gehostete Steuerelement. Im Fall von einem web-browser, würden Sie auch haben, Sie zu leiten Tastatur-Ereignisse.
Meinem Fall war es ziemlich einfach - eine Tabelle mit einigen einfachen Maus-Interaktion. Ein web-browser-Steuerelement kann andere Probleme haben, die ich nicht berücksichtigen. Ja, ich hoffe, das hilft.
InformationsquelleAutor dcstraw
Ich dieses Problem auch. In meinem Fall war ich ziehen von Bildern aus einem Fenster in dem WebBrowser, sondern natürlich sobald mein Bild verschoben in den browser, wurde Sie versteckt.
Momentan folgende Lösung:
Diese Lösung ist sehr spezifisch auf meine situation, aber vielleicht wird es Ihnen einige Ideen.
InformationsquelleAutor turtlewax
Konnte ich dieses Problem durch die Verwendung dieser Struktur, die überprüfung der Eigenschaften-Konfiguration in jedem element:
Müssen Sie nur zu verwalten, den Expander zu zeigen, oder verstecken Sie Ihre Inhalte, ich verwende es für ein menu-bar, ich denke, dass der expander ist optional, je nach Fall.
Schauen Sie sich dieses Bild mit dem Ergebnis, Sie können sogar zeigen Sie Ihre Steuerelemente auf der Oberseite der WebBrowser und auch außerhalb der Haupt-Fenster:
InformationsquelleAutor Hannish