Support, Anregungen, Wünsche zur Tutorialreihe <WPF lernen/>

  • WPF MVVM

Es gibt 448 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Hallo,

    eine vermutung habe ich, weis aber nicht zu 100% ob das die Lösung wäre. (Zumindest obs die eleganterste Lösung wäre)
    Jo, die Solution wäre nicht schlecht, dann kann ich mal probieren. Habe am Nachmittag eh ein wenig Zeit.

    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. ##

    Hi @Nofear23m
    ich bin auch auf der Fehlersuche.
    Kurios ist, das ich im Testprojekt (WPF Application) 2 Verweise habe. 1 mal auf die UserControls und 1 mal auf die StyleTemplates.
    Wenn ich nun in der MainWindow.cs versuche einen import der Namespaces zu machen, wird mir IMMER nur UserControls angezeigt, nie die StyleTemplates.

    Also hab ich das komplette Projekt StyleTemplates mal raus gehauen, alles bereinigt, neu erstellt und dann ein neues WPF-Benutzersteuerelementbibliothek hinzugefügt (MHoApps.Resources.BaseResources)
    Dort einfach nur den Namespace wieder der Konvention angepasst (de.mhoapps.Resources.BaseResources) und im WPF App wieder nen Verweis gesetzt.

    Und? Nix, wird immer nur UserControls angezeigt.

    Kann es sein das er dies nicht erkennt weil weder Klassen, noch Usercontrols sondern nur XAML dateien in dem Projekt sind?

    Ich probier gerade noch was rum, baue die Assembly Prefixe nochmal ein und lade dann die Solution hoch.

    Danke Dir

    EDIT: Jepp, genau das war es gewesen. Sobald ich ne Klasse oder ein UserControl in die BaseResources einfüge, findet er den Namespace.
    "Hier könnte Ihre Werbung stehen..."
    So ähnlich wäre hätte meine Solution auch ausgesehen.

    Passt jetzt also alles??
    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,

    hmmmm.... fast.... ich hab in der BaseResources in der AssemblyInfo nun:

    C#-Quellcode

    1. [assembly: XmlnsPrefix("http://schema.mhoapps.de/resources","res")]
    2. [assembly: XmlnsDefinition("http://schema.mhoapps.de/resources", "de.mhoapps.Resources.BaseResources.Styles")]
    3. [assembly: XmlnsDefinition("http://schema.mhoapps.de/resources", "de.mhoapps.Resources.BaseResources.Templates")]
    4. [assembly: XmlnsDefinition("http://schema.mhoapps.de/resources", "de.mhoapps.Resources.BaseResources.Trigger")]
    5. [assembly: XmlnsDefinition("http://schema.mhoapps.de/resources", "de.mhoapps.Resources.BaseResources.UserControls")]


    drin stehen. Namespace wird im WPF App auch gefunden.
    bei den Merged Dictionarys zeigt er mir auch bravg den res: an.

    Und hier klemmt es nun. Mein Versuch über res:DefaultStyles die DefaultStyles einzubinden klappt leider nüscht.

    C#-Quellcode

    1. <Application x:Class="de.mhoapps.Test.StyleTester.App"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:res="http://schema.mhoapps.de/resources"
    5. xmlns:local="clr-namespace:de.mhoapps.Test.StyleTester"
    6. StartupUri="MainWindow.xaml">
    7. <Application.Resources>
    8. <ResourceDictionary>
    9. <ResourceDictionary.MergedDictionaries>
    10. <ResourceDictionary Source="{res:DefaultStyles}"/>
    11. </ResourceDictionary.MergedDictionaries>
    12. </ResourceDictionary>
    13. </Application.Resources>
    14. </Application>

    wird untergringelt mit der Meldung:

    EDIT: wohinghegen genau das gleiche mit UserControls einwandfrei funktioniert :(

    C#-Quellcode

    1. [assembly: XmlnsPrefix("http://schema.mhoapps.de/usercontrols", "uc")]
    2. [assembly: XmlnsDefinition("http://schema.mhoapps.de/usercontrols", "de.mhoapps.Resources.BaseResources.UserControls")]


    C#-Quellcode

    1. <Window x:Class="de.mhoapps.Test.StyleTester.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:de.mhoapps.Test.StyleTester"
    7. xmlns:uc="http://schema.mhoapps.de/usercontrols"
    8. mc:Ignorable="d"
    9. Title="MainWindow" Height="450" Width="800">
    10. <Grid>
    11. <uc:ucHeaderTitleBar/>
    12. </Grid>
    13. </Window>


    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    wohinghegen genau das gleiche mit UserControls einwandfrei funktioniert

    Kann auch nicht verglichen werden. Resourcen sind wieder was anderes.

    Wie gesagt, lade doch bitte mal hoch - bei solchen Dingen ist es immer sehr schwer nur Anhand von Bilder oder der gleichen etwas zu sagen und man übersieht dann schnell einiges (wie CaseSensitive Typos) ohne der unterstützung durch die IDE.

    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. ##

    Hallo @MichaHo

    Habe mir das jetzt angesehen. Die Sache ist erstmal die das man Resourcen (Styles, Templates) nicht wie Code behandeln kann. Auch was Namespaces betrifft.
    Da Resourcen kein Code sind und auch nicht wie Code kompiliert werden sind diese nicht wie Code in Namespaces. Deshalb gilt hier auch bei der Sourceangebe in einem ResourceDictionary auch die Ordnerstruktur der Solution.

    Das bedeutet:

    Du kannst deine UserControl oder auch CustomControls wie gewohnt einbinden, auch mit der Zusammenfassung des Namespaces mit eigenem Präfix und Definition wie du es gemacht hast (schema.mhoapps.de/resources).
    Die Resourcen musst du allerdings als Resources einbinden, was Assemblyübergreifend etwas anders von statten geht.
    Willst du die ControlStyles.xaml verwenden dann mit <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/ControlStyles.xaml"/>

    Beispiel für eine App.xaml:

    XML-Quellcode

    1. <Application.Resources>
    2. <ResourceDictionary>
    3. <ResourceDictionary.MergedDictionaries>
    4. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/ControlStyles.xaml"/>
    5. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/DefaultStyles.xaml"/>
    6. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Templates/ControlTemplates.xaml"/>
    7. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Templates/DataTemplates.xaml"/>
    8. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Templates/ItemTemplates.xaml"/>
    9. </ResourceDictionary.MergedDictionaries>
    10. </ResourceDictionary>
    11. </Application.Resources>


    Aber diese können auch Gruppiert werden. Hierzu in dem Projekt wo die Resourcen enthalten sind ein Resourcedictionary anlegen (z.b. MHoApps.Styles.xaml):

    XML-Quellcode

    1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    3. xmlns:local="clr-namespace:de.mhoapps.Resources.BaseResources.Styles">
    4. <ResourceDictionary.MergedDictionaries>
    5. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/ControlStyles.xaml"/>
    6. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/DefaultStyles.xaml"/>
    7. </ResourceDictionary.MergedDictionaries>
    8. </ResourceDictionary>


    Und dann einbinden. Egal ob in App.xaml oder in einem Windows oder sonstwo:

    XML-Quellcode

    1. <ResourceDictionary.MergedDictionaries>
    2. <ResourceDictionary Source="pack://application:,,,/MHoApps.Resources.BaseResources;component/Styles/MHoApps.Styles.xaml"/>
    3. </ResourceDictionary.MergedDictionaries>


    Ich hoffe ich habs so erklärt das man mir folgen konnte.

    Grüße
    Sascha
    Dateien
    • Test.zip

      (276,88 kB, 33 mal heruntergeladen, zuletzt: )
    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 @Nofear23m
    absolut perfekt erklärt, habs verstanden.

    Das Vorgehen gilt dann aber für ein Projekt, wo beide Projekte (Resources und WPF Application) in einer Solution sind, oder?
    Wenn ich jetzt eine neue Solution habe, und dort in einer WPF Application dann nur die DLL verweise, klappt das dann auch mit dem ResourceDictionary in der App.xaml?

    wenn nicht, habe ich noch ne andere Idee, ich könnte die Styles usw. (sind ja ResourceWörterbücher) auch in dien .shared Ordner schmeißen und in dem Projekr (WPF App) dann als Link hinzufügen, dann klappt es auf jeden Fall und wenn ein Style hinzukommt, wird alles automatisch über all göeich sein. So mache ich das ja mit den AssemblyInfo...
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    MichaHo schrieb:

    Das Vorgehen gilt dann aber für ein Projekt, wo beide Projekte (Resources und WPF Application) in einer Solution sind, oder?

    Nene, das klappt auch mit einem Verweis auf eine DLL. Alles andere macht ja keinen Sinn.

    Schau z.b. mal hier bei den MahApps. Ist da genauso - und dort hast du das Projekt als solches auch nicht.

    Spoiler anzeigen
    Vorallem weil man heutzutage ja eigentlich gar keinen Verweis mehr auf eine DLL setzt. (zumindest nicht so wie früher) sondern alles über NuGet macht.
    Ein eigener NuGet Server ist in Minuten aufgesetzt und auch Lokale Pfade werden unterstütz wodurch man sein eigenes NuGet Repository auf einem NAS oder Share liegen haben kann.

    Ich habe glaube ich zwei Jahren keine DLL mehr eingebunden. Nur Nuget. Ich verändere mein Projekt und zack habe ich in allen Projekten wo diese Assembly verwendet wird im NuGetManager stehen das ein Update zur Verfügung steht und kann dieses mit einem klick einspielen.


    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. ##

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

    MichaHo schrieb:

    Ich hab mich noch nie mit NuGet beschäftigt

    Wie? Auch nicht "konsumiert"?

    Ne, NuGet kostet nichts - weder die konsumation noch das hochladen eigener Pakete auf NuGet.org. Auch ein eigene NuGet Server da es lediglich eine ASP.Net Web API ist.
    Ja, vieleicht mach ich mal was in die Richtung - hab aber eh im Moment genug zu tun. Komm ja mit meinem Tut schon nicht weiter =O

    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. ##

    Komsumiert schon. Also ich weis wie man NugetPakete einbindet.
    Mache ich immer mit nUpdate von @Trade

    sind aber denn dann alle meine Projekte die ich da hochlade für alle verfügbar? Oder kann ich die auf Privaze stellen?
    "Hier könnte Ihre Werbung stehen..."
    Auf NuGet.org schon. Deshalb gibt es die möglichkeit sich einen eigenen zu machen. Oder eben einen Netzwerkordner anzugeben. Es gibt da zig möglichkeiten - auch private bezahl Server gibt es. und, und, und.

    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. ##

    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 @Nofear23m
    Die Anleitung war Top, konnte 2 Server erstellen. Einmal hab ich Ihn lokal auf ner 2. Partition erstellt und einmal als FTP auf meinem Webspace.

    Nun, wenn ich die Prebuild und Postbuild anpasse und als Server den lokalen angebe (D:\MHoApps.NuGetServer) klappt alles einwandfrei.
    Beim FTP klappt es leider garnicht. Ich kann den NuGetServer dorthin deployen, kein Problem, aber die nupkg Datei meines Projektes will er absolut nicht dorthin schieben.

    API Key passt, ich hab denke ich auch genug rechte und das hochladen des NuGetServers klappt auch.
    Ich hab verschiedene ServerAddress schreibweisen probiert, leider bekomme ich immer den gleichen Fehler:
    Failed to process request. 'Method Not Allowed'. Der Remoteserver hat einen Fehler zurückgegeben: (405) Unzulässige Methode..
    Muss ich irgendwo noch Berechtigunegn setzen?
    "Hier könnte Ihre Werbung stehen..."
    Hallo

    Wenn du normal per Browser auf deinen NuGet Server gehst muss eine Seite kommen wo er anzeigt wie die URL lautet welche du in VS eintragen musst. Siehe Screenshot von meinem Server.
    Ladest du ein Paket hoch in den Packages Ordner sollte er automatisch erkennen das es ein neues File gibt und von selbst einen Ordner anlegen (inkl. Unterordner für die Version) und das Paket dort rein verschieben.

    Natürlich muss der IIS Dienst Schreibzugriff auf den/die Ordner haben.


    Evtl. kann er das Paket nicht verschieben bzw. die Ordner nicht erstellen da dies der IIS Process erledigt und nicht DU mit deinen Berechtigungen.

    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. ##

    Hallo

    Naja, das ist ja ein Linux Server richtig? Das klappt dann ja nicht mit ner ASP.Net Website. Ist klar.
    Aber es gibt auch noch andere möglichkeiten. z.b. docs.microsoft.com/en-us/nuget/hosting-packages/overview

    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. ##