2010-06-30 17 views
10

È possibile avere un progetto contenente sia Winforms che WPF?È possibile avere un progetto contenente sia Winforms sia WPF?

Dire un progetto WinForm che viene trasformato passo dopo passo (modulo per modulo) in uno WPF, sarà possibile avere un Winform che si apre su un pulsante e un WPF che si apre su un altro pulsante?

+1

u può dare una migliore titolo per questo in modo che appaia meglio nei risultati di ricerca (magari copiare prima linea :)) –

risposta

14

Sì. Devi scegliere una tecnologia per visualizzare ogni finestra fisica e controllo nella tua app, ma non c'è motivo per cui non puoi combinare.

Ad esempio:

  • finestra Una WinForms può mostrare una finestra WPF.
  • Una finestra WPF può mostrare una finestra WinForms.
  • Una finestra WinForms può contenere contenuto WPF (vedere il controllo ElementHost).
  • Una finestra WPF può contenere controlli WinForms (vedere il controllo WindowsFormsHost).
+0

più uno per indicare tutte le combinazioni di mix WPF/WinForm –

0

Non vedo obiezioni a farlo. (Ho nelle finestre WPF dell'applicazione WinForms) Molti degli esempi utilizzati MessageBox.Show che fa parte di Windows.Forms. Ovviamente è necessario riscrivere tutte le finestre, non solo i controlli.

+0

così in un progetto è possibile avere un'apertura Winform su un pulsante, e una WPF aprendo su un altro pulsante? – serhio

+1

Diventa difficile se si dispone di un'applicazione MDI, tuttavia, poiché la finestra WPF non espone una proprietà "MdiParent". – Robaticus

1

Quello che stai cercando è il controllo ElementHost. Quello che ti permette di fare è prendere il contenuto WPF e ospitarlo in una finestra di Windows Form. Maggiori dettagli sono qui:

http://msdn.microsoft.com/en-us/library/ms745781.aspx

C'è anche un controllo che ti permette di fare il contrario: host di Windows Form contenuti all'interno di WPF:

http://nayyeri.net/host-windows-forms-controls-in-wpf

Tra i due, è possibile spostare la "linea di demarcazione" tra WPF e Windows Form con un certo grado di flessibilità.

C'è un avvertimento che è necessario tenere a mente. Windows Form funziona internamente in termini di HWND ... una finestra gestita dal gestore di finestre legacy di Windows (che gestisce lo z-order). WPF non lo fa ... Un albero WPF è tipicamente reso in un singolo HWND ', ed è WPF che gestisce cose come z-order. Ciò significa per te che z-order non funziona sempre come te lo aspetti, e ci sono cose che non puoi fare con i controlli di Windows Form ospitati che puoi fare con gli elementi WPF tradizionali. (C'è in realtà un modo per risolvere questo problema, ma comporta il rendering periodico dell'HWND in una bitmap di memoria, che trasforma quella bitmap in una superficie WPF e quindi reindirizza gli eventi diretti alla superficie WPF al sottostante HWND. Ciò è potente, ma difficile

1

L'aggiunta di Winform ai progetti WPF può essere eseguita in modo fluido (direttamente dal menu "Aggiungi nuovo elemento"), ma non è possibile aggiungere una finestra WPF a un progetto Winforms.Eppure, ho gestito per farlo seguendo questi passaggi:

  1. aggiungere un controllo utente WPF (questa opzione è disponibile sul "Aggiungi nuovo voce" menu) e quindi convertirlo in una finestra WPF. Modificare XAML cambiando il tag padre UserControl in Window e rimuovere l'ereditarietà da UserControl (tutto ciò è spiegato in this link).

  2. Aggiungere un riferimento a System.Xaml.dll. Vedi this link.

  3. Aggiungere un riferimento a System.Windows.dll (l'ho trovato sul mio computer in questo percorso: C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework.NETFramework \ v4.5. potrebbe essere diverso nel tuo). Vedi this link.

+1

Sono stato in grado di aggiungere Windows WPF a un progetto Winform modificando il file manifest del progetto come descritto qui: http://stackoverflow.com/questions/8311956/open-wpf- window-in-WindowsForm-app/32691690 # 32691690 –

Problemi correlati