2012-03-29 16 views

Respuesta

12

Según MSDN (Layout Considerations for the WindowsFormsHost Element)

a Alojado control de Windows Forms se dibuja en un HWND separado, por lo que es siempre dibujado en la parte superior de los elementos de WPF.

Esta es una limitación de diseño

Otro buen artículo de MSDN que explica los posibles problemas cuando se utilizan diferentes tecnologías de gráficos en Windows es Technology Regions Overview

Sin embargo buscando en Google encontré que parece que hay algunos hackings de este (conocida como la restricción del espacio aéreo)

Un truco (nunca había probado personalmente así que no sé si funciona) es al this link

+8

enlace "hackear" 403s – RJFalconer

1

actualización, unos años más tarde (2016-09):

Mi siguiente respuesta, como lo señala el comentario arriba, ya no es válida, y no estaba disponible en la versión final de .NET 4.5, o versiones posteriores. Desafortunadamente, el enlace que incluí aún tiene información de ordenamiento z para HwndHosts presente para la "versión actual" de .NET, lo que podría llevar a algunos a creer que esta funcionalidad, de hecho, existe. No es así No hay solución alternativa.

Respuesta original:

Un año más tarde, las cosas han cambiado un poco con .NET 4.5. Para los que se topó con esto, tanto como lo hice, aquí es un extracto más actualizada de Walkthrough: Arranging Windows Forms Controls in WPF en MSDN:

Por defecto, los elementos WindowsFormsHost visibles siempre están dibujados por encima de otros elementos de WPF, y son no afectado por el orden z Para habilitar el orden z, establezca la propiedad IsRedirected de WindowsFormsHost en true y la propiedad CompositionMode en Full o OutputOnly.

Todo lo que tiene que hacer, cuando se utiliza .NET 4.5, es añadir los siguientes atributos para el elemento de WindowsFormsHost IsRedirected="True" y CompositionMode="Full"oCompositionMode="OutputOnly".

+24

Lo comprobé hoy: estas propiedades solo se encontraban en la versión beta de .net 4.5. desafortunadamente no llegaron a la versión normal. –

+3

1.3.10 Windows Presentation Foundation (WPF) 1.3.10.1 La característica HwndHost se ha eliminado de WPF en .NET Framework 4.5 Beta La .NET Framework 4.5 Developer Preview incluía una característica de redirección WPF HwndHost. Sin embargo, esta característica tenía varios problemas conocidos y se eliminó de .NET Framework 4.5 Beta. No se incluirá en ningún lanzamiento futuro. Para resolver este problema: No hay solución disponible. – lukaszk

+0

¿Cómo usarlo en .NET 4? ¿Es posible? – mrhands

0

Acabo de encontrar el mismo problema.

Existe un potencial solución - dependiendo de la naturaleza del control de la ventana de host de Windows y el elemento de WPF que desea que aparezca:

que limitan el control WindowsFormsHost de Visibility a una propiedad en mi modelo de vista para que yo pueda para ocultar el host (y los controles) cuando quiero mostrar el WPF que queremos que aparezca sobre él.

0

En mi situación, mi WindowsFormsHost está en una cuadrícula de dos filas.La fila inferior tiene un StackPanel que cambia de altura en función de lo que contiene. Manejo el evento LayoutUpdated de ese StackPanel para redimensionar mi WindowsFormsHost restando su actualHighight del realHeight de Grid. Asegúrese de utilizar ActualHeight y no Height.

 void ResizeWinhost() 
    { 
     mainGrid.UpdateLayout(); 
     detailPanel.UpdateLayout(); 
     winHost.Height = mainGrid.ActualHeight - detailPanel.ActualHeight - 5; 
    } 
Cuestiones relacionadas