Contrôle WPF 3.5 WebBrowser et ZIndex
Je suis à essayer de comprendre pourquoi le contrôle n'a pas d'honneur, ZIndex.
Exemple 1 - qui fonctionne très bien
<Canvas>
<Rectangle Canvas.ZIndex="1" Height="400" Width="600" Fill="Yellow"/>
<Rectangle Canvas.ZIndex="2" Height="100" Width="100" Fill="Red"/>
</Canvas>
Exemple 2 - ce qui ne fonctionne pas
<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>
Grâce,
-- Ed
source d'informationauteur emsieja
Vous devez vous connecter pour publier un commentaire.
Malheureusement, c'est parce que le contrôle WebBrowser est un wrapper autour de l'Internet Explorer contrôle COM. Cela signifie qu'il obtient ses propres HWND et ne permet pas de WPF à dessiner n'importe quoi sur elle. Il a les mêmes restrictions que l'hébergement de tout autre Win32 ou WinForms contrôle WPF.
MSDN a plus d'informations sur WPF/Win32 interop.
Vous êtes en cours d'exécution dans une commune WPF écueil, plus communément appelée "Le Problème de l'espace aérien". Une solution possible est de ne PAS utiliser le contrôle WebBrowser, et au lieu d'aller pour quelque chose d'un peu plus fou - à savoir incorporé navigateur WebKit rendu directement à WPF. Il y a deux packages qui font cela; Awesomonium (commercial) et de Berkélium (open-source). Il y a un .NET wrapper pour les deux de ces.
Vous pourriez SetWindowRgn à faux la zone de chevauchement en la cachant, comme illustré ici:
Vous pouvez également utiliser un transparent contrôle Contextuel pour avoir quelque chose de flotter au-dessus du contrôle WebBrowser. Plus d'informations et un exemple de code peut être trouvé ici.
J'ai résolu un problème similaire où j'ai été accueillir un 3ème partie WinForms de contrôle dans mon application WPF. J'ai créé un contrôle WPF qui rend les WinForms de contrôle dans la mémoire et ensuite les peintures d'une image bitmap. Puis-je utiliser DrawImage dans le OnRender méthode pour dessiner le rendu du contenu. Enfin, j'ai routé les événements de la souris de mon contrôle à l'hébergé de contrôle. Dans le cas d'un navigateur web, vous devez également avoir à route aux événements de clavier.
Mon cas était assez facile - un graphique avec une simple interaction de la souris. Un contrôle de navigateur web peut avoir d'autres questions que je n'ai pas pris en considération. De toute façon j'espère que ça aide.
J'ai touché à cette question. Dans mon cas, j'ai été en faisant glisser les images à partir d'un panneau dans le WebBrowser, mais bien sûr, dès que mon image déplacée dans le navigateur, il a été caché.
Actuellement en train de travailler sur la solution suivante:
Cette solution est très spécifique à ma situation, mais peut-être que ça vous donnera quelques idées.
J'ai réussi à résoudre ce problème en utilisant cette structure, vérifiez les propriétés de configuration de chaque élément:
Vous avez juste à gérer le dispositif d'afficher ou de masquer le contenu, je l'utilise pour une barre de menu, je pense que le dispositif est facultatif, selon le cas.
Découvrez cette photo avec le résultat, vous pouvez même afficher vos commandes sur le dessus de la WebBrowser et même à l'extérieur de la fenêtre principale: