2011-02-02 9 views
11

Ho un'app WinForm esistente che è troppo da portare a WPF in questo momento. Tuttavia, ho bisogno di una finestra con un comportamento di trasparenza difficile che non riesco a ottenere in un WinForm (sì, ho provato Layerd Windows ma è un no-go).Come creare una finestra WPF in modo programmatico in un'applicazione WinForm

WPF consente il comportamento di trasparenza che mi serve in modo bello e semplice.

Ovviamente ho cercato su Google, ma posso trovare solo suggerimenti su come creare un controllo WPF all'interno di un WinForm ma NON è ciò di cui ho bisogno. Ho bisogno di una finestra WPF separata che sia completamente indipendente dai miei altri moduli.

La finestra WPF sarà una finestra di sovrapposizione a schermo intero piuttosto semplice e senza bordi, in cui eseguirò alcuni semplici disegni, ciascuno con diversi lucidi.

Come posso creare una finestra WPF all'interno di un'applicazione WinForm?

+0

Dai un'occhiata alla mia risposta a questa: http://stackoverflow.com/questions/8311956/open-wpf-window-in-windowsform-app/32691690#32691690 –

risposta

13

Aggiungere i riferimenti WPF necessari al progetto, creare un WPF Window -instance, chiamare EnableModelessKeyboardInterop e visualizzare la finestra.

La chiamata a EnableModelessKeyboardInterop assicura che la finestra WPF ottenga gli input da tastiera dall'app Windows Form.

Fare attenzione, se si apre una nuova finestra dalla finestra WPF, l'input della tastiera non verrà indirizzato a questa nuova finestra. Devi chiamare anche queste finestre appena create EnableModelessKeyboardInterop.

Per gli altri requisiti, utilizzare Window.Topmost e Window.AllowsTransparency. Non dimenticare di impostare WindowStyle su None, altrimenti la trasparenza non è supportata.

Aggiornamento
I seguenti riferimenti devono essere aggiunti ad utilizzare WPF in Windows Form applicazione:

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

@Harald: Se la mia risposta ti ha aiutato, contrassegnala come risposta accettata. – HCL

+0

I tuoi ulteriori collegamenti alle informazioni non funzionano più. –

+0

Rimossi, grazie per le informazioni – HCL

6

Ecco la soluzione (testata). Questo codice può essere utilizzato sia in un'app WinForm o WPF. Nessun XAML necessario.

#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; 
    } 
} 

lo sfondo della finestra è completamente trasparente. Puoi disegnare sulla tela e ogni elemento può avere la sua trasparenza (che puoi determinare impostando il canale alfa del Pennello usato per disegnarlo). È sufficiente richiamare la finestra con qualcosa di simile

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

+1 nota che invece di 'nuovo SolidColorBrush (Colore.FromArgb (0,0,0,0)) 'puoi scrivere' Brushes.Black' –

Problemi correlati