Laden...

App.xaml vs Themes/Generic.xaml und assembly:ThemeInfo

Erstellt von t-master vor 13 Jahren Letzter Beitrag vor 13 Jahren 9.285 Views
T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren
App.xaml vs Themes/Generic.xaml und assembly:ThemeInfo

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

2.223 Beiträge seit 2005
vor 13 Jahren

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

T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren

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?
2.223 Beiträge seit 2005
vor 13 Jahren

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

T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren

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?

742 Beiträge seit 2005
vor 13 Jahren

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.

T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren

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

T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren

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

Z
403 Beiträge seit 2007
vor 13 Jahren

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é

T
t-master Themenstarter:in
179 Beiträge seit 2007
vor 13 Jahren

ja, also ich hab das Problem mittlerweile gefunden 😉
Das war eine Kombination aus:

  • ResourcenWörterbuch mit den Farben in der Generic.xaml eingebunden (und nicht in der App.xaml, wo sowas hingehört)
  • kleiner Fehler in einem Control, sodass der Style nicht angewendet wird
  • Styles für Framework-Controls (also für die, die von MS bereitgestellt werden) in der Generic.xaml eingebunden (und nicht in der App.xaml wo auch die hingehören)

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