WPF im Design von WinForms

  • WPF

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Johannes.

    WPF im Design von WinForms

    Hallo ihr Lieben,

    ich möchte in WPF Anwendungen schreiben, die im Look&Feel einer WinForms-Anwendung gleicht.
    Ich hatte erhofft, dass ich das einfach mit dem PresentationFramework.Luna oder Classic erreiche, doch obwohl ich einen Verweis auf diese einbinde, werden mir im XAML nur Fehler angezeigt.
    Visual Studio 2019; .Net Framework 4.8.04084; ich entwickel in VB.Net

    Hier habe ich eine Anleitung für die Themes gefunden.
    andydunkel.net/2019/02/22/wpf-themes-verwenden/
    Wenn ich das so nachmache, erhalte ich die Fehlermeldung ".... Wird von diesem Projekt nicht verwiesen"
    bzw.

    Das Attribut "Include" ist im XML-Namespace "http://schemas.microsoft.com/winfx/2006/xaml" nicht vorhanden.


    Also, in der WPF kann ich die genialsten Designs realisieren, eine Schaltfläche, die wie ein Wackeldackel aussieht, der mit den Augen dem Mauskursor folgt und alle 10 Minuten in seine Hundehütte kriecht, um sich einen Knochen zu holen und bei deaktivierter Schaltfläche schläft der Hund und schnarcht leise vor sich hin. Ja, hübsch, aber wer brauch das schon. Und dieser Witz greift sich sehr schnell ab, danach ergeht es wie "Karl Klammer": "Wie kann ich das blöde Ding abschalten?".
    ich hätte gern eine simple alte Schaltfläche im Design von WinForms, Textfelder in 3D-Optik "tiefer gelegt" und in der Regel ein Fester mit einer gewöhnlichen Titelleiste (wie bei Windows XP).
    Warum? Nun, weil ich es so will! Ich gehe davon aus, dass die WPF das prinzipiell kann, wenn sie so komplizierte Designs wie den "Wackeldackel" hinbekommt, dann müsste doch so etwas wie ein "stinknormales" WinForms-Design möglich sein.



    XML-Quellcode

    1. <Application x:Class="Application"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:DB6"
    5. StartupUri="MainWindow.xaml">
    6. <Application.Resources>
    7. <ResourceDictionary>
    8. <ResourceDictionary.MergedDictionaries>
    9. <ResourceDictionary Source="/PresentationFramework.Luna, Version=3.0.0.0,
    10. Culture=neutral, PublicKeyToken=31bf3856ad364e35,
    11. ProcessorArchitecture=MSIL;component/themes/luna.homestead.xaml" />
    12. </ResourceDictionary.MergedDictionaries>
    13. </ResourceDictionary>
    14. </Application.Resources>
    15. </Application>



    Wie so oft, die Lösung wird sicher ganz einfach sein; wenn man weiß wie's geht.

    Danke für eure Hilfe und Hinweise!
    Johannes
    Hy, also ohne nun näher auf Theming einzugehen solange es nicht sein muss hier mal nur eine allgemeine Erklärung.

    Per Default nimmt die WPF das eingestellte Design vom Windows des Benutzers. Zumindest solange man eimmEigenschaften nicht überschreibt. Erstellst du also einen Button wird dieser als ganz normaler Button gerendert. Das ist das Default verhalten.
    Willst du das nicht weil du sagst "ja, weil ich das hald will" dann musst du auch damit rechnen das selbst zu erstellen. Was ja in WPF mehr als einfach ist. Du musst es aber selbst festlegen. Entweder als Styles oder zu erstellst ein eigenes WinForm Theme. So ist das leoder "wenn man sas so will". Ich sag es nochmal, WPF ist nicht WinForms und muss sich damit auch nicht vergleichen. Es sind zweierlei UI Frameworks die Unterschiedlicher nicht sein könnten, warum vergleicht man diese nur immer?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    warum vergleicht man diese nur immer?

    Weil die meisten mit WinForms das Programmieren begonnen haben. Bzw sind mit WinFoms als erstes in Kontakt gekommen. Da tut man sich schwer sich auf etwas neues einzulassen.
    Mir ging es auch so. Mittlerweile mag ich WPF mehr und nutze WinForms nicht mehr.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Ja, das ist mir schon klar.
    Aber das ein anderes Framework auch anders funktioniert und anders aussieht ist irgendwie ja klar und das dann zu vergleichen ist ja unnötig. Zumindest meiner Meinung nach.

    Ne Website wird auch nie aussehen wie ne WinForms Anwendung. Und ne HandyApp auch nicht.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,
    das ist mir schon klar, dass WPF ein völlig eigenes Framework ist!

    Meine Frage war eine rein optische.
    Ich hätte gern eine WPF-Anwendung in der Optik von WinForms.
    Ich könnte die mir auch in der Optik von Apple, oder irgend einem Linux denken oder ein Handy simulieren, das alles geht ja in der WPF, - mir reicht WinForms.
    (Eigentlich will ich eine Access Anwendung ohne Access schreiben, in der sich meine Anwender sofort zu Hause fühlen und alles so vorfinden, wie sie es seit 15 Jahren gewohnt sind und höchstens mal an der einen oder anderen Stelle bemerken "Das geht jetzt schneller!")

    Ich war der Meinung, dass ich das mit dem "PresentationFramework.Luna" oder "PresentationFramework.Classic" erreichen könnte (wie in der Anleitung beschrieben), nur hat das bei mir nicht funktioniert (s.o.) .

    Liebe Grüße
    Johannes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Johannes“ ()

    Ich habe es bei mir mal eben getestet... funktioniert.
    Entferne mal den / ganz am Anfang der Source.

    XML-Quellcode

    1. <ResourceDictionary>
    2. <ResourceDictionary.MergedDictionaries>
    3. <ResourceDictionary Source="PresentationFramework.Luna, Version=3.0.0.0,
    4. Culture=neutral, PublicKeyToken=31bf3856ad364e35,
    5. ProcessorArchitecture=MSIL;component/themes/luna.homestead.xaml" />
    6. </ResourceDictionary.MergedDictionaries>
    7. </ResourceDictionary>


    sieht bei mir dann so aus.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Wie Sascha (Nofear23m) schon schrieb: Es ist ohne Probleme möglich, mittels WPF die WinForms Optik zu bekommen. Man muss eben nur die standardmäßigen Styles umschreiben, respektive eigene Styles erstellen, die die defaults überschreiben. Aber wenn man sich erstmal mit dem "Styles overrides" beschäftigt, ist es kein Hexenwerk.

    Allerdings muss man tatsächlich bedenken, dass das Einarbeiten in WPF doch deutlich komplexer ist als bei WinForms. Dafür hat man aber eben auch einfach mehr Möglichkeiten

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PadreSperanza“ ()

    Nofear23m schrieb:

    Per Default nimmt die WPF das eingestellte Design vom Windows des Benutzers. Zumindest solange man eimmEigenschaften nicht überschreibt. Erstellst du also einen Button wird dieser als ganz normaler Button gerendert.

    Stimmt leider nicht. Mache ich eine neuen WPF Anwendung ohne irgendwas einzustellen sieht diese nicht wie mein System aus.

    Bluespide schrieb:


    Stimmt leider nicht. Mache ich eine neuen WPF Anwendung ohne irgendwas einzustellen sieht diese nicht wie mein System aus.


    Doch, was geschrieben wurde stimmt schon - in gewisser Weise. Denn ich glaube, ihr habt aneinander vorbei geschrieben.Denn was eigentlich damit gemeint war:

    Wenn man WPF nutzt, dann erscheinen Buttons IMMER als graue Schaltfläche und wird beim MouseHover blau schimmernd dargestellt - per default. Immer. Dieses Verhalten kann natürlich geändert und angepasst werden.

    Entweder: Durch ändern und überschreiben des Styles. Dann gilt dieses immer. Unabhängig von Windoof.
    Oder: Durch Ändern des Windoof eigenen Styles. Dann erscheinen ALLE Standardanwendungen immer in diesem Design, außer <entweder> trifft zu
    Hallo Akanel,

    ja so hatte ich mir das vorgestellt und so sollte es nach dem oben genannten Link auch funktionieren, tut es bei mir aber nicht.
    Irgend etwas mache ich vermutlich beim Import des PresentationFramwork.Luna falsch.

    Kannst du dein Beispiel hochladen, sicher ist es wieder nur ein falscher Haken und schon geht es / oder eben nicht.

    Vielen Dank!

    Neu

    Hallo Akanel,

    wie so oft hängt die WPF, wenn nur ein einziges Zeichen (oder hier zwei) nicht so dasteht, wie es die WPF erwartet.

    Das ist der kleine, aber bedeutende Unterschied:
    "/PresentationFramework.Luna, "
    "../PresentationFramework.Luna, "

    Die obere Schreibweise hatte ich aus der Anleitung, die untere von dir.

    Vielen Dank