Pregunta

Estoy tratando de averiguar por qué el control no honra ZIndex.

Ejemplo 1 - que funciona bien

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

Ejemplo 2 - el que no funciona

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

Gracias, -- Ed

¿Fue útil?

Solución

Por desgracia, esto es debido a que el control WebBrowser es un envoltorio para el Internet Explorer control COM.Esto significa que obtiene su propio HWND y no permitir WPF para dibujar cualquier cosa sobre él.Tiene las mismas restricciones que el hosting de cualquier otro Win32 o WinForms control de WPF.

MSDN tiene más información acerca de WPF/Win32 interoperabilidad.

Otros consejos

Se ejecuta en un común WPF escollo, más comúnmente llamado el "El espacio Aéreo Problema".Una posible solución es NO utilizar el control WebBrowser, y en lugar de ir por algo un poco más loco - a saber incorporado un navegador WebKit de representación directamente a WPF.Hay dos paquetes que hacer esto;Awesomonium (comercial) y Berkelium (open-source).Hay una .NETA envoltura de ambos.

Usted podría SetWindowRgn a falso el área de superposición por ocultarlo, como se muestra aquí:

He resuelto un problema similar, donde yo era el anfitrión de una 3 ª parte WinForms control en mi aplicación de WPF.He creado un control WPF que representa el WinForms de control en la memoria y, a continuación, dibuja un mapa de bits.Entonces yo uso DrawImage en el OnRender método para dibujar el contenido presentado.Por último, me enruta los eventos de ratón de mi control para el control alojado.En el caso de un navegador web también tiene que dirigir los eventos de teclado.

En mi caso fue bastante fácil - una tabla con algunos de ratón simple interacción.Un control de explorador web puede tener otras cuestiones que no me tome en cuenta.De todos modos espero que le ayude.

Me tocó este tema.En mi caso me fue arrastrando las imágenes de un panel en el WebBrowser, pero, por supuesto, tan pronto como mi imagen se movió en el navegador que estaba oculta.

Actualmente trabajando en la siguiente solución:

  1. Cuando la Imagen de arrastre comienza, crear un mapa de bits de la WebBrowser el uso de "RenderTargetBitmap"
  2. Añadir el mapa de bits para el lienzo, utilizando el mismo ancho/ubicación como el webbrowser
  3. webControl.La Visibilidad = Visibilidad.Ocultas.
  4. Cuando la resistencia es liberado, quitar el mapa de bits y el conjunto de webControl.Visibilidad = Visibles.

Esta solución es muy específico de mi situación, pero tal vez le dará algunas ideas.

Me las arreglé para resolver esto mediante el uso de esta estructura, echa un vistazo a la configuración de las propiedades de cada elemento:

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

Sólo tienes que gestionar el Expansor para mostrar u ocultar el contenido, lo estoy usando para una barra de menú, creo que el expansor es opcional, dependiendo del caso.

Echa un vistazo a esta imagen con el resultado, usted puede incluso mostrar los controles en la parte superior de la WebBrowser e incluso fuera de la ventana principal:

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top