2009-06-01 20 views
7

Tengo un control WPF que me gustaría superponer en una aplicación WinForms. Así que he creado un host diligentemente elemento que puede mostrar el siguiente objeto WPF:C# Transparencia WPF sobre controles Winform

<UserControl x:Class="LightBoxTest.LightBox" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" Width="300" Background="Transparent"> 
    <Grid Name="dialogHolder" Background="Transparent" Opacity="1"> 
     <Rectangle Name="rectangle1" Stroke="White" Fill="Black" RadiusX="10" RadiusY="10" Opacity="0.5" /> 
     <StackPanel Name="stackPanel1" Background="Transparent" Height="300" VerticalAlignment="Top"> 
      <Rectangle Name="spacer" Opacity="0" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" Height="100" Width="300" /> 
      <Grid Height="100" Name="contentHolder" Width="250"> 
       <Rectangle Name="dialog" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" Height="100" Width="250" /> 
      </Grid> 
     </StackPanel> 
    </Grid> 
</UserControl> 

El problema es que los controles en el formulario WinForm no se representan y el WPF sólo les oblitera en la pantalla.

El anfitrión elemento se crea como:

dialogHost = new ElementHost(); 
dialogHost.Child = dialog; 
dialogHost.BackColorTransparent = true; 
dialogHost.BringToFront(); 
dialogHost.Show(); 

¿Hay algo que debería estar haciendo y no estoy?

¿Existen problemas conocidos para mostrar controles transparentes WPF sobre Winforms?

¿Alguna técnica que pueda ayudar?

Nota: Esta pregunta está relacionada con this question

Respuesta

6

Creo que te estás encontrando con un airspace issue. AFAIK, no se puede mezclar la transparencia de WPF y la transparencia de ElementHost ya que ElementHost posee el espacio aéreo.

Hay una breve reseña en el enlace sobre la creación de archivos no rectangulares para alojar contenido WPF, y eso puede llevarlo más lejos.

¿Quizás pueda considerar migrar más aplicaciones de WinForms a WPF?

0

Probablemente ya ha probado esto, pero ¿qué hay de ajuste de la opacidad en el control de usuario?

0

Parece un problema de interoperacion airspace.