Hi,
kann mir mal jemand die Unterschiede zwischen den oben genannten Möglichkeiten, Styles einzubinden erklären (und evtl noch die Wirkungen der Einstellungen von assembly:ThemeInfo)?
Ich bin da momentan recht verwirrt, vor allem, da ich gerade nach stundenlanger Suche rausgefunden habe, dass eins der Controls die ich benutze aus irgendeinem Grund unbedingt über die Generic.xaml eingebunden werden muss, damit alles dargestellt wird.
Tobi
Hallo t-Master,
App.xaml globale Styles für die gesamte anwendung zb Farbliche Gestaltung zu vergleichen mit Css
zb
<Window.Resources></Window.Resources>
innerhalb des jeweiligen controls
Global.XAML zum verändern des gesamten Controls (zb 8 eckiger Button)
diese Datei wird auch bei der Erstellung von CustomControls benötigt.
http://stackoverflow.com/questions/1163013/what-is-the-themeinfo-attribute-for
Viele Grüße
Lars
Ok, ich kapiers iwie immernoch nicht X( (Und meinst du mit GLOBAL.xaml die Generic.xaml?)
Wo trag ich denn zum Beispiel:
Hallo T-Master,
ja ich meinte Generic,
zum Thema Style, Templates, Converter möchte ich Dir einen Rat geben, nachdem ich dieses aufbaue.
so lokal wie möglich und so global wie nötig,
das heißt
wenn es sich um Applikationsweiten Style, Template, ... handelt => App.Xaml
wenn es nur für eine Fenster oder Control benötigt wird => dar überliegende Resources
Eigenes Control oder Globale Control Veränderung wie der Applikationsweite 8 Eckige Button => Generic
Viele Grüße
Lars
Aber Globale Control Veränderung dürfte doch so ziemlich das gleiche wie ein Applikationsweiter Style (oder auch Template) sein, oder?
Und dann wäre da noch das Control (der TaskDialog von WPFContrib, bzw die CommandLinks des TaskDialogs), welches den Style nur aus der Generic.xaml ausliest, gibts dafür n speziellen Grund?
edit: Also, bei mir sieht es momentan so aus:
Ich habe ein Programm mit Convertern und eigenen Controls mit Styles dazu, die nur für das Programm selbst bestimmt sind und eine Assembly mit Convertern und eigenen Controls mit den Styles dazu und Styles für Framework-Controls die sowohl für das Programm selbst, die Assembly und Plugins bestimmt sind.
Mein Aufteilung wäre jetzt:
In die App.xaml.cs kommen die Converter rein.
Der Rest kommt jeweils in die Generic.xaml des Programms bzw der Assembly.
Doch momentan werden keine der beiden generic.xamls erkannt, sodass zum Beispiel ein Style, welcher in der externen Assembly definiert und im Hauptprogramm genutzt wird nicht gefunden wird.
Und welche ThemeInfo-Attribute für die externe Assembly und das Hauptprogramm muss ich dennn da setzen?
In die Generic.xaml kommen die Standard Styles der Controls. Das heißt wenn du keine Custom Controls schreibst, deren Template verändert werden kann (!= UserControl) solltest du keine derartige Datei anlegen.
In App.xaml kommen globale Resourcen und Styles. Wenn deine Converter nicht sehr speziell sind, hast du dort einen guten Platz gefunden.
Ok, ich kapiers iwie immernoch nicht X( (Und meinst du mit GLOBAL.xaml die Generic.xaml?)
Wo trag ich denn zum Beispiel:
- ein Style für ein Control (Button, ListView, ...)
- ein DataTemplate (für ListViewItem, ...)
- die Instanz eine Converters
- die Resourcen mit den Farben (auf die die Controls zugreifen)
ein?
Hier gilt die Regel von Lars Schmitt. Wird dein DataTemplate nur für ein UserControl oder ein Window verwendet, sollte es dort platziert werden. Sonst in der App.xaml, eben so lokal wie möglich und so global wie nötig.
ImageTools for Silverlight: http://imagetools.codeplex.com | http://www.silverdiagram.net | http://www.cleancodedeveloper.de b:::
Ok, jetzt hats Klick gemacht 😁
Bliebe nurnoch das hier:
Also, bei mir sieht es momentan so aus:
Ich habe ein Programm mit Convertern und eigenen Controls mit Styles dazu, die nur für das Programm selbst bestimmt sind und eine Assembly mit Convertern und eigenen Controls mit den Styles dazu und Styles für Framework-Controls die sowohl für das Programm selbst, die Assembly und Plugins bestimmt sind.Mein Aufteilung wäre jetzt:
In die App.xaml.cs kommen die Converter rein Also sowohl von der MainApplication als auch vom externen Assembly)
Der Rest kommt jeweils in die generic.xaml des Programms bzw der Assembly.
Doch momentan werden keine der beiden generic.xamls erkannt, sodass zum Beispiel ein Style, welcher in der externen Assembly definiert und im Hauptprogramm genutzt wird nicht gefunden wird.
Und welche ThemeInfo-Attribute für die externe Assembly und das Hauptprogramm muss ich dennn da setzen?
nochmal ein edit:
also es sieht wirklich so aus als ob keine der beiden generic.xaml geladen werden würde, obwoh ich bei beim normalen start einen fehler bekomme, dass ein control, welches über die generics.xaml eingebunden wurde eine ressource in der gleichen xaml datei nicht finden kann (also das {StaticResource Name} findet nichts).
Wenn ich die entsprechenden Eintrag für die Datei in der generic.xaml ausklammere, läd das Programm, aber halt die Styles der generic.xamls nicht 😦
Tobi
So, also mittlerweile bin ich soweit, dass das Programm ohne Fehler geladen wird, nur werden halt die Styles/Themes nicht angewendet, weiß jemand, woran das liegen kann?
(ThemeInfo ist None, SourceAssembly)
t-master
Hallo,
ich mache das mit styles so:
wir haben eine Library für Styles und diese werden je nach dem was benötigt wird, in die App.xaml eingebunden für jedes Control/Style z.B. ComboBox oder ListView gibts eine eigene Datei.
In die App.xaml wird sonst deklariert da< es bei großen projekten unübersichtlich wird. (Ausserdem geht die gennante wiederverwendbarkeit einzelner styles/converter was auch immer verloren)
Das garantiert jedenfalls eine hohe wiederverwendbarkeit und es ist trotzdem einfach zu verwalten.
Bei einer externen assembly sieht das in der App.xaml z.B. so aus:
<ResourceDictionary Source="pack://application:,,,/ControlLibary;component/Themes/generic/listview.xaml"></ResourceDictionary>
Themes ist ein Ordner innerhalb der Library, component ist wichtig weil es angibt das es zur jeweiligen assembly gehört.
Gruß André
ja, also ich hab das Problem mittlerweile gefunden 😉
Das war eine Kombination aus:
Mir ist erst gestern klar geworden, dass die Generic.xaml ja nur für die Styles der eigenen Controls da ist 😁
Ich werds zwar nochmal ausprobieren müssen, aber jetzt sollte alles laufen.
Vielen Dank nochmal allen für eure Hilfe 😉
Tobi