Domanda

Ho un progetto collaterale che ho scritto qualche anno fa in WinForms. Per aiutarmi meglio a imparare WPF, vorrei riscriverlo in WPF. Idealmente, vorrei solo modificare l'attuale progetto che ho e riscrivere l'interfaccia utente in WPF invece di creare un nuovo progetto.

Sto avendo dei problemi nel farlo. Ho fatto quanto segue (usando Visual Studio 2008 SP1):

  1. Modificato Target Framework da 2.0 a 3.5.
  2. Aggiunti riferimenti a PresentationCore, PresentationFramework e WindowsBase.

A questo punto, ho notato che qualcosa non andava. Quando ho fatto clic con il pulsante destro del mouse sul progetto e ho selezionato Aggiungi | Nuovo elemento, non avevo un'opzione per creare una finestra WPF - l'unica classe WPF che potevo creare è un controllo utente WPF. Dato che avevo altri progetti WPF in giro, ho copiato App.xaml. * E Window1.xaml. * Da quel progetto al mio, e li ho aggiornati, se necessario, sostanzialmente cambiando lo spazio dei nomi di quel progetto nello spazio dei nomi del mio progetto).

Ho quindi eliminato Program.cs (che in precedenza conteneva il metodo Main, che visualizzava il modulo WinForm principale) e ho creato il progetto. Ho ricevuto un errore che indica che non esiste un metodo principale.

Sembra che Visual Studio sappia che questo progetto è davvero un'app WinForms e non un'app WPF. In un progetto WPF (creato selezionando & Quot; Applicazione WPF & Quot;), nelle proprietà dell'applicazione è possibile impostare l'istanza della classe Application come oggetto di avvio. Nel mio progetto convertito WinForms, questa non è un'opzione.

Ho dato una rapida occhiata al file .csproj in un editor di testo, ma non sono riuscito a trovare nulla che potesse dire a Visual Studio che il progetto è davvero WinForms anziché WPF.

Cos'altro devo fare per trasformare il mio progetto WinForms in un " real " Progetto WPF? Ho un'opzione diversa dalla creazione di un nuovo progetto e dalla semplice sostituzione del mio progetto attuale?

Aggiornamento: ho dato un'occhiata più da vicino ai file .csproj e ho notato che App.xaml è stato aggiunto come pagina:

<Page Include="App.xaml">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
</Page>

Tuttavia, nel mio altro progetto WPF, è una ApplicationDefinition. Una volta modificato, ho potuto impostare la mia istanza dell'applicazione come oggetto di avvio e la mia app sarebbe stata eseguita. Tuttavia, non ho ancora un'opzione per creare tipi WPF diversi dai controlli utente.

È stato utile?

Soluzione

Non so per certo che cosa nel file di progetto informi Visual Studio quale tipo di progetto viene utilizzato, ma la mia ipotesi è la " ProjectTypeGuids " è la chiave.

I miei progetti WPF hanno questo:

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

Ecco un link che ho trovato che descrive le guide e che tipo di progetto che rappresentano. Noterai che il guid inizia con & Quot; 60DC & Quot; corrisponde all'elenco nel collegamento per le applicazioni WPF.

Altri suggerimenti

La risposta di Sailing Judo ha funzionato per me nel convertire un progetto WinForms in un WPF, ma non ha descritto in dettaglio ciò che è necessario;

  1. Apri il csproj file per il progetto che vuoi convertire.
  2. Cerca la stringa <ProjectTypeGuids> - molto probabilmente non esisterà.
  3. Aggiungi quanto segue nel tag del file di progetto. Se hai più PropertyGroup tag, usa quello senza un attributo Condition (ad esempio le proprietà predefinite).

      

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

  4. Salva: se il progetto è aperto VS chiederà di ricaricare il progetto.

Da quello che vedo e collaudo, ora posso facilmente aggiungere WFF Windows e WinForms. Anche i miei WinForm più vecchi funzionano senza problemi.

Purtroppo no.

I progetti WPF e Windows Form non sono molto compatibili.

  • Cerca di estrarre più pignoleria codice logico in una libreria di classi
  • Crea una nuova soluzione vuota
  • Aggiungi un nuovo progetto WPF alla soluzione
  • Aggiungi il progetto della libreria di classi al file Soluzione
  • Imposta la libreria di classi come dipendenza di il progetto WPF
  • Ricrea le finestre in WPF

Spero che questo funzioni per te.

Buona fortuna con questo sforzo!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top