2011-02-02 17 views
11

Tengo una aplicación WinForm existente que es demasiado para portar a WPF en este momento. Sin embargo, necesito una ventana con un comportamiento de transparencia complicado que no puedo lograr en un WinForm (sí, intenté Layerd Windows, pero es un no-go).Cómo crear mediante programación una ventana WPF en una aplicación WinForm

WPF permite el comportamiento de transparencia que necesito hermosa y simplemente.

Busqué en Google, por supuesto, pero solo puedo encontrar sugerencias sobre cómo crear un control WPF dentro de un WinForm pero eso NO es lo que necesito. Necesito una ventana de WPF separada que sea completamente independiente de mis otras formas.

La ventana de WPF será una ventana de superposición sin bordes y de pantalla completa bastante simple en la que haré algunos dibujos simples, cada uno con diferentes transparencias.

¿Cómo puedo crear una ventana WPF dentro de una aplicación WinForm?

+0

un vistazo a mi respuesta a esto: http://stackoverflow.com/questions/8311956/open-wpf-window-in-windowsform-app/32691690#32691690 –

Respuesta

13

Agregue las referencias de WPF necesarias a su proyecto, cree un WPF Window -instance, llame al EnableModelessKeyboardInterop y muestre la ventana.

La llamada a EnableModelessKeyboardInterop asegura que su ventana de WPF obtendrá entradas de teclado desde su aplicación Windows Forms.

Tenga cuidado, si abre una nueva ventana desde su ventana WPF, la entrada del teclado no se enrutará a esta nueva ventana. También debe llamar a estas ventanas recién creadas EnableModelessKeyboardInterop.

Para otros requisitos, use Window.Topmost y Window.AllowsTransparency. No olvide configurar el WindowStyle en None, de lo contrario, la transparencia no es compatible.

actualización
Las siguientes referencias, debe añadirse a utilizar WPF en su aplicación de Windows Forms:

  • PresentationCore
  • PresentationFramework
  • System.Xaml
  • WindowsBase
  • WindowsFormsIntegration
+0

@Harald: si mi respuesta te ha ayudado, márcala como la respuesta aceptada. – HCL

+0

Sus enlaces de información adicional ya no funcionan. –

+0

Se eliminaron, gracias por la información – HCL

6

Aquí está la solución (probada). Este código se puede usar en una aplicación WinForm o WPF. No se necesita XAML en absoluto.

#region WPF 
// include following references: 
// PresentationCore 
// PresentationFramework 
// WindowsBase 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 
using System.Windows.Shapes; 
#endregion 


public class WPFWindow : Window 
{ 

    private Canvas canvas = new Canvas(); 

    public WPFWindow() 
    { 
     this.AllowsTransparency = true; 
     this.WindowStyle = WindowStyle.None; 
     this.Background = Brushes.Black; 
     this.Topmost = true; 

     this.Width = 400; 
     this.Height = 300; 
     canvas.Width = this.Width; 
     canvas.Height = this.Height; 
     canvas.Background = Brushes.Black; 
     this.Content = canvas; 
    } 
} 

El fondo de la ventana es completamente transparente. Puede dibujar en el lienzo y cada elemento puede tener su propia transparencia (que puede determinar configurando el canal alfa del Cepillo utilizado para dibujarlo). simplemente invocar la ventana con algo como

WPFWindow w = new WPFWindow(); 
w.Show(); 
+1

+1 Tenga en cuenta que en lugar de 'new SolidColorBrush (Color.FromArgb (0,0,0,0)) 'puedes escribir' Brushes.Black' –

Cuestiones relacionadas