Apri la finestra WPF in APP WindowsForm

Ho aggiunto alla mia app WindowsForm una nuova finestra WPF chiamata novoLogin.

Dopo averlo aggiunto, ho aggiunto il riferimento a system.xaml …. debug fine.

Ora sto cercando di aprire questa nuova finestra dal WindowsForm esistente.

novoLogin nl = new novoLogin(); nl.show(); 

Il compilatore sta dando questo errore:

Errore 1 ‘WindowsFormsApplication1.novoLogin’ non contiene una definizione per ‘show’ e nessun metodo di estensione ‘show’ accetta un primo argomento di tipo ‘WindowsFormsApplication1.novoLogin’ potrebbe essere trovato (ti manca una direttiva using o un riferimento assembly?)

Questo breve articolo spiega come puoi ottenere questo.

Se ti trovi nella necessità di aprire una finestra WPF da un programma WinForms, questo è un modo per farlo (funziona per me):

  1. Crea / Aggiungi un nuovo progetto di tipo WPF Custom Control Library
  2. Aggiungi un nuovo elemento di tipo Window (WPF)
  3. Fai il tuo lavoro con la finestra WPF
  4. Dalla tua app WinForms, crea e apri la finestra WPF

     using System; using System.Windows.Forms; using System.Windows.Forms.Integration; var wpfwindow = new WPFWindow.Window1(); ElementHost.EnableModelessKeyboardInterop(wpfwindow); wpfwindow.Show(); 

Dai un’occhiata a questo: http://www.mobilemotion.eu/?p=1537&lang=en

Sommario:

Apri il file manifest del progetto (quello con l’estensione .csproj o .vbproj) in qualsiasi editor di testo. Il nodo superiore di solito contiene diversi tag, uno per ogni configurazione di build e uno globale. Nel nodo globale (quello senza attributo Condition), cerca il sub-nodo o creane uno se non esiste . Questo nodo dovrebbe contenere due GUID: FAE04EC0-301F-11D3-BF4B-00C04F79EFBC, che sta per un progetto C # e 60dc8134-eba5-43b8-bcc9-bb4bc16c2548 che sta per WPF. La linea completa dovrebbe apparire come segue:

{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

(Se sei interessato ai dettagli, codeproject contiene un elenco completo dei potenziali GUID del progetto: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs )

Ricarica il progetto in Visual Studio e apri la procedura guidata Aggiungi nuovo elemento.

Poiché il progetto è ora ufficialmente classificato come progetto WPF, questa procedura guidata dovrebbe ora contenere l’opzione della finestra WPF. A proposito, poiché non esiste un GUID del progetto WinForms che possa essere sovrascritto, questo approccio non danneggia i componenti del progetto esistenti.

Ho appena provato questo approccio per un progetto VB.NET e funziona!

Ovviamente, con VB.NET è necessario modificare sopra le righe sostituendo il GUID da {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} a {F184B08F-C81C-45F6-A57F-5ABD9991F28F}

Volevo mostrare il formato wpf in windowForm e c’era qualche problema con le risorse …

(perché ho usato le risorse ..). Finalmente ho usato questo codice nel mio progetto windowsForm:

Per prima cosa crea un’istanza globale della tua class di app in questo modo:

 WPFTest.App app; 

perché questo è globale?

perché questa class è singleton e non è ansible creare più di un’istanza nello stesso AppDomain

Ora per esempio hai un evento button per mostrare il modulo wpf. All’evento del pulsante abbiamo:

  private void button1_Click(object sender, EventArgs e) { if (System.Windows.Application.Current == null) { app = new WPFTest.App() { ShutdownMode = ShutdownMode.OnExplicitShutdown }; app.InitializeComponent(); } else { app = (WPFTest.App)System.Windows.Application.Current; app.MainWindow = new WPFTest.YourWindow(); System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(app.MainWindow); app.MainWindow.Show(); } } 

nota: WPFTest è il nome del tuo progetto e YourWindow () è la finestra che vuoi mostrare