Laden...

Style in Generic.xaml wird nicht zugewiesen

Erstellt von Caveman vor 2 Jahren Letzter Beitrag vor 2 Jahren 372 Views
Caveman Themenstarter:in
187 Beiträge seit 2009
vor 2 Jahren
Style in Generic.xaml wird nicht zugewiesen

Hallo,
ich habe begonnen, meine Controls unter Visual Studio 2022 aud .Net6 umzustellen. Dafür verwende ich ein eigenes Projekt (nur der Übung halber!).
Wie ich nun feststellen muss, wird der zum Control definierte Style aus der Generic.xaml nicht zugewiesen, so dass das komplette Control nicht sichtbar wird.
Google sagt, dass das früher schon immer mal ein Problem war und dass das an einem doppelten Generic.xaml liegen könnte. Die vorgeschlagenen Lösungen habe ich erfolglos durchprobiert. Wenn ich den kompletten Style im instantierten Control zuweise funktioniert alles.
Die Generic.xaml besteht nur aus einem ResourceDictionary, wo auf die xaml-Dateien für die einzelnen Controls verwiesen wird.

Hat hier jemand einen Tip?

2.078 Beiträge seit 2012
vor 2 Jahren

Ich persönlich habe noch nie eine "Generic.xaml" genutzt 😁
Also wenn es für diesen speziellen Namen irgendwelche Sonderregelungen gibt, weiß ich nichts davon.

Jedenfalls muss das ResourceDictionary bekannt sein, das geht entweder in der App.xaml für alles oder in der konkreten xaml, wo Du das Control nutzen willst.
Vermutlich fehlt dir einfach der passende Eintrag in der App.xaml, dass deine Generic.xaml auch gefunden wird.

Dazu muss dann natürlich auch der Key bekannt sein, das ist normalerweise für einen Default-Style einfach der Typ ({x:Type}) des Controls und im Control überschreibst Du dann den Wert der DefaultStyleKeyProperty.

Bei mir gibt's je Control ein eigenes ResourceDictionary, einfach um die Suche und Übersicht zu erleichtern.
Und damit die App.xaml nicht zu riesig wird, hat jede Assembly mit solchen Controls eine weitere xaml, wo alle ResourceDictionarys zusammengefasst werden - die wird dann in der App.xaml eingebunden.

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 2 Jahren

Ich persönlich habe noch nie eine "Generic.xaml" genutzt 😁
Also wenn es für diesen speziellen Namen irgendwelche Sonderregelungen gibt, weiß ich nichts davon.

Diese zwei Sätze haben mir die Augen geöffnet, auch wenn wir da aneinander vorbei reden. Ich bin so ein Dödel. Hat mich jetzt keine 30 Minuten gekostet, das Projekt ans Laufen zu bekommen! Gestern ist mir das nach 10 Stunden Google-Suche und etlichen Gläsern Bowle nicht eingefallen.
Lösung: Der richtige Projekttyp ist wichtig. Statt "WPF-Klassenbibliothek" hätte ich "Bibliothek benutzerdefinierter WPF-Steuerelemente" auswählen müssen. Dann wird nämlich auch der Themes-Ordner mit Generic.xaml angelegt und verwendet!

Vielen Dank @Palladin007!

2.078 Beiträge seit 2012
vor 2 Jahren

Ach dafür ist das ThemeInfoAttribute da 😁
Das wird bei dem Template, das Du meinst, mit generiert:


using System.Windows;

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
                                     //(used if a resource is not found in the page,
                                     // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
                                              //(used if a resource is not found in the page,
                                              // app, or any theme specific resource dictionaries)
)]


Wieder was gelernt.