Frage

Ich versuche, herauszufinden, warum die Steuerung nicht ZIndex nicht einlöst.

Beispiel 1 - der gut arbeitet

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

Beispiel 2 - das funktioniert nicht

   <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>

Danke, - Ed

War es hilfreich?

Lösung

Leider ist dies, weil das WebBrowser-Steuerelement ein Wrapper um das Internet Explorer COM-Steuerelement ist. Das bedeutet, dass es seine eigene HWND bekommt und erlaubt keine WPF etwas über sie zu zeichnen. Es hat die gleichen Einschränkungen wie andere Win32 oder WinForms Kontrolle in WPF-Hosting.

MSDN hat weitere Informationen über WPF / Win32 Interop.

Andere Tipps

Sie sind in einen gemeinsamen WPF pitfall ausgeführt wird, am häufigsten das „Luft Problem“ bezeichnet. Eine mögliche Lösung ist nicht das WebBrowser-Steuerelement zu verwenden, und stattdessen für etwas einen wenig verrückte zu gehen - nämlich einen integrierten WebKit Browser direkt an WPF-Rendering. Es gibt zwei Pakete, die dies tun; Awesomonium (Gewerbe) und Berkelium (Open-Source). Es gibt eine .NET-Wrapper für diese beiden.

Sie können den Überlappungsbereich SetWindowRgn zu fälschen, indem er sich versteckt, wie hier gezeigt:

Ich löste ein ähnliches Problem, wo ich eine 3rd-Party-WinForms Kontrolle in meiner WPF-Anwendung wurde Hosting. Ich habe eine WPF Steuerelement, das die Steuer WinForms im Speicher macht, und dann zeichnet sie in eine Bitmap. Dann verwende ich DrawImage im OnRender Verfahren den gerenderten Inhalt zu ziehen. Schließlich geroutet ich Mausereignisse aus meiner Kontrolle auf die gehostete Steuerelement. Im Falle eines Web-Browsers würden Sie auch zu routen Tastaturereignisse haben.

Mein Fall war recht einfach - ein Diagramm mit einigen einfachen Maus-Interaktion. Ein Web-Browser-Steuerelement kann andere Probleme, die ich nicht berücksichtigt habe. Auf jeden Fall hoffe ich, dass hilft.

Ich traf dieses Problem auch. In meinem Fall wurde ich Bilder von einer Platte in das WebBrowser ziehen, aber natürlich so schnell wie mein Bild in den Browser bewegte es versteckt wurde.

Derzeit auf der folgenden Lösung arbeiten:

  1. Wenn das Bild ziehen beginnt, erstellen Sie eine Bitmap des Web-Browser verwenden „Rendertargetbitmap“
  2. Fügen Sie Ihre Bitmap auf die Leinwand, die gleiche Breite / Ort wie der Web-Browser mit
  3. webControl.Visibility = Visibility.Hidden.
  4. Wenn der Widerstand freigegeben wird, entfernen Sie Ihre Bitmap und setzen webControl.Visibility = Visible.

Diese Lösung ist sehr spezifisch für meine Situation, aber vielleicht wird es Ihnen ein paar Ideen.

habe ich es geschafft, dies zu lösen, indem sie unter Verwendung dieser Struktur, überprüfen Sie die Eigenschaften Konfiguration in jedem Element aus:

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

Sie müssen nur den Expander verwalten, um Ihre Inhalte anzeigen oder ausblenden, ich bin es für eine Menüleiste, denke ich, dass der Expander je nach Fall optional ist.

Dieses Bild Schauen Sie sich mit dem Ergebnis, können Sie sogar Ihre Kontrollen auf dem Web-Browser anzeigen und sogar außerhalb des Hauptfensters:

eingeben Bild Beschreibung hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top