Frage

Ich habe ein Nebenprojekt, das ich vor ein paar Jahren in WinForms schrieb. Um besser helfen mir WPF lernen, würde Ich mag es in WPF neu zu schreiben. Im Idealfall würde Ich mag nur das aktuelle Projekt ändern, die ich habe und die Benutzeroberfläche in WPF neu schreiben, anstatt ein neues Projekt zu schaffen.

Ich habe einige Probleme, das zu tun. Ich habe das folgende (unter Verwendung von Visual Studio 2008 SP1):

  1. Changed die Target Framework von 2,0 bis 3,5.
  2. hinzugefügt PresentationCore, PresentationFramework und Windows Referenzen.

An diesem Punkt, bemerkte ich etwas nicht stimmt. Als ich klickte rechts das Projekt und Add ausgewählt | Neues Element, habe ich eine Option, nicht ein WPF-Fenster zu erstellen - die einzige WPF-Klasse, die ich ein WPF User Control schaffen könnte. Da ich um einige andere WPF-Projekte hatte, kopierte ich App.xaml. * Und Window1.xaml. * Von diesem Projekt zu mir, und aktualisiert sie bei Bedarf (im Grunde nur den Namespace des Projekts an den Namensraum meines Projekts ändern).

Ich löschte dann Program.cs (die zuvor das Hauptverfahren enthalten sind, welche die Haupt WinForm Formular angezeigt) und das Projekt gebaut. Ich habe einen Fehler anzeigt, dass es keine Hauptmethode ist.

Es scheint, wie intern Visual Studio weiß, dass dieses Projekt wirklich eine WinForms-Anwendung ist, und nicht eine WPF-Anwendung. In einem WPF-Projekt (erstellt mit „WPF-Anwendung“ auswählen), in den Anwendungseigenschaften kann ich die Instanz der Application-Klasse gesetzt, wie ein Start-up-Objekt. In meinem WinForms umgewandelt Projekt, das ist keine Option.

Ich nahm einen kurzen Blick auf der CSPROJ Datei in einem Texteditor, aber ich kann nichts finden, dass Visual Studio sagen würde, dass das Projekt wirklich eher ist WinForms als WPF.

Was muß ich tun, um mein WinForms-Projekt in ein „echtes“ WPF-Projekt zu machen? Muß ich eine andere Option als ein neues Projekt anlegen und nur ein aktuelles Projekt zu ersetzen?

Update: Ich nahm einen genaueren Blick auf den CSPROJ Dateien, und ich bemerkte, dass App.xaml als Seite hinzugefügt:

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

Doch in meinem anderen WPF-Projekt, es ist ein Application. Sobald es das geändert, konnte ich meine Anwendungsinstanz als Start-up-Objekt festgelegt, und meine app laufen würde. Ich habe nicht noch eine Option haben keine WPF andere Typen als User Controls zu erstellen, though.

War es hilfreich?

Lösung

Ich weiß nicht, für bestimmt , was in der Projektdatei informiert Visual Studio, welche Art von Projekt verwendet wird, aber meine Vermutung ist die „ProjectTypeGuids“ ist der Schlüssel.

Meine WPF-Projekte haben diese:

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

Hier ist ein Link ich gefunden, die die guids beschreibt und welche Art von Projekt, das sie repräsentieren. Sie werden bemerken, dass die guid mit „60DC“ Start entspricht die Liste in dem Link für WPF-Anwendungen.

Andere Tipps

Sailing Judo Antwort für mich gearbeitet, um ein WinForms-Projekt in eine WPF zu konvertieren, aber nicht beschreiben im Detail, was erforderlich ist;

  1. Öffnen Sie die csproj-Datei für das Projekt, das Sie konvertieren möchten.
  2. Suchen Sie nach der Zeichenfolge <ProjectTypeGuids> -. Meisten likly es wird nicht existieren
  3. Fügen Sie den folgenden innerhalb des Tags der Projektdatei. Wenn Sie mehr PropertyGroup Tags haben, verwenden Sie das eine ohne Condition Attribut (beispielsweise die Standardeigenschaften).

      

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

  4. Speichern -. Wenn Sie das Projekt geöffnet VS haben fragt das Projekt erneut zu laden

Von dem, was ich sehe, und testet, kann ich jetzt einfach WPF Windows- hinzufügen und WinForms. Mein älterer WinForms arbeitet auch ohne Probleme.

Leider nicht.

WPF und Windows Forms-Projekte sind nicht sehr kompatibel.

  • Versuchen Sie, so viel Umständlichkeit zu extrahieren Logik-Code in eine Klassenbibliothek
  • Erstellen Sie eine neue leere Lösung
  • Fügen Sie ein neues WPF-Projekt zur Lösung
  • Fügen Sie die Klassenbibliothek Projekt die Lösung
  • Stellen Sie die Klassenbibliothek als eine Abhängigkeit von das WPF-Projekt
  • Erstellen Sie die Fenster in WPF

Hope das funktioniert für Sie.

Viel Glück mit diesem Unterfangen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top