Skinning: Verwenden einer Farbe als StaticResource für eine andere Farbe
Ich umgesetzt Kürschner in meiner Anwendung. Die Anwendung lädt die Bürsten.xaml-ressourcenwörterbuch, die verwendet Farben, die sich in einer Haut-spezifischen Ressourcen-Wörterbuch. Also nur eine Farbe.xaml geladen wird, abhängig von der gewählten skin.
Haut-Farbe.xaml
<Color x:Key="TextBoxBackgroundColor">#C4AF8D</Color>
<Color x:Key="TextBoxForegroundColor">#6B4E2C</Color>
<Color x:Key="ToolBarButtonForegroundColor">#6B4E2C</Color>
Bürsten.xaml:
<SolidColorBrush
x:Key="TextBoxBackground"
Color="{DynamicResource TextBoxBackgroundColor}" />
<SolidColorBrush
x:Key="TextBoxForeground"
Color="{DynamicResource TextBoxForegroundColor}" />
Wie Sie sehen können, mehrere Farben (TextBoxForegroundColor und ToolBarButtonForegroundColor) sind die gleichen. Ich würde gerne umgehen, dass, wie es immer mehr und mehr verwirrend, vor allem, da die verwendeten Farben sind nicht erkennbar, die durch Ihren hex-Wert. Sie beraten könnte jetzt mischen der beiden Farben in einer, aber ich habe skins, wo die TextBoxForegroundColor unterscheidet sich von der ToolBarButtonForegroundColor.
Was ich tun möchte ist etwas wie dieses:
<Color x:Key="DarkBrown">#C4AF8D</Color>
<Color x:Key="TextBoxBackgroundColor" Color={StaticResource DarkBrown} />
<Color x:Key="ToolBarButtonForegroundColor" Color={StaticResource DarkBrown} />
Ist, ist das überhaupt möglich in Xaml? Ich habe nicht einen Weg finden.
InformationsquelleAutor der Frage Amenti | 2011-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
?
(Funktioniert übrigens)
InformationsquelleAutor der Antwort H.B.
Warum gehst du nicht einfach machen, Bürsten.xaml-skin-spezifisch sind? Dann haben Sie diese:
Weiterer Punkt zu Gunsten der Herstellung Bürsten, Haut-spezifisch ist, dass es Situationen gibt, wo würden Sie wollen, um die
ToolBarButtonForegroundBrush
einen Pinsel mit Volltonfarbe in einem Haut-und einem Farbverlauf, Pinsel in der anderen.InformationsquelleAutor der Antwort Pavlo Glazkov
H. B. s Antwort ist sehr interessant und ich habe rumgespielt, es durchaus ein wenig, da ich möchte, genau das zu tun, was diese Frage zu Fragen, zu tun.
Was ich bemerkt habe ist, dass mit einem DynamicResource funktioniert nicht für WPF 3.5. Das ist, wirft er eine exception zur Laufzeit (der Amenti spricht darüber). Allerdings wenn Sie die Farben verweisen auf die Farbe, die Sie möchten, zu teilen ... eine StaticResource, es funktioniert auf beiden WPF 3.5 und WPF 4.0.
Ist, wird diese xaml für WPF 3.5 und WPF 4.0:
Andere Sache, die trägt, zu erwähnen (wieder) ist, dass dieser Ansatz verheerende Auswirkungen mit den Designern gibt (ich.e-Visual Studio 2008 und 2010 Designer, die Mischung 3 und 4 Designer). Ich spekulieren, dass dies der gleiche Grund, warum Kaxaml 1.7 war nicht wünschen H. B. s xaml (wenn Sie nach der Kommentar-stream auf H. B. ' s Antwort).
Aber während es bricht sich die Designer für einen einfachen Testfall, es scheint nicht zu brechen, die die design-Oberfläche für die großflächige Anwendung, ich arbeite in meinem job. Plain komisch! In anderen Worten, wenn Sie sich sorgen über Dinge, die noch arbeiten in der designer, versuchen Sie diese Methode sowieso aus ... der designer kann noch arbeiten!
InformationsquelleAutor der Antwort cplotts
Dass Letzte Teil nicht möglich ist, hat die Farbe keine Eigenschaft Farbe.
Eine Farbe, hat Sie einen R -, G -, B-und A-Eigenschaft. So könnte man das erstellen von vier bytes, die als Ressourcen:
Immer noch nicht, was Sie könnten es vorziehen, aber es sollte funktionieren.
InformationsquelleAutor der Antwort Erno de Weerd