23 Konzepte von WPF
Unter der WPF müssen wir zwei Gruppen von Ressourcen unterscheiden:
- binäre Ressourcen
- logische Ressourcen
Bei den binären Ressourcen kann es sich um Videos, Musik oder auch Bilder handeln, für die binäre Datenströme (Streams) notwendig sind. Im Grunde genommen handelt es sich dabei um nicht ausführbare Dateien, die mit einer Anwendung ausgeliefert werden müssen. Binäre Daten wurden schon von der ersten Version des .NET Frameworks unterstützt und stellen somit keine Besonderheit im Zusammenhang mit der WPF dar.
Ganz anders verhält es sich mit logischen Ressourcen, einem mit der WPF eingeführten neuen Konzept. Dabei handelt es sich um .NET-Objekte, die an mehreren Stellen einer WPF-Anwendung genutzt werden können. Ressourcen werden in einem mit Resources gekennzeichneten Abschnitt eines WPF-Elements angegeben. Resources ist als Eigenschaft in der Klasse FrameworkElement definiert, so dass nahezu jedes WPF-Element einen Resources-Abschnitt beschreiben kann.
Die später in diesem Kapitel behandelten Styles und Templates setzen das Feature logischer Ressourcen voraus. Daher werden wir uns zuerst mit den allgemeinen Kriterien zur Bereitstellung von Ressourcen beschäftigen müssen. Anschließend folgen thematisch die Styles und Templates. Styles fassen Eigenschaften zusammen, die auf mehrere Steuerelemente angewendet werden können und das Layout vereinheitlichen. Templates gehen sogar noch einen Schritt weiter und ermöglichen es, Steuerelemente vollständig umzugestalten. Sie können mit Templates zum Beispiel runde Schaltflächen definieren.
23.1 Anwendungsspezifische Ressourcen
Logische Ressourcen werden meistens im XAML-Code definiert. Alles, was Sie im XAML-Code festlegen, können Sie natürlich auch mit C#-Code erreichen. Allerdings ist der Weg über XAML der einfachere und normalerweise auch derjenige, der zu bevorzugen ist.
Ressourcen lassen sich an drei Lokalitäten festlegen:
- Eine Ressource kann innerhalb eines WPF-Elements angegeben werden. Die Sichtbarkeit
der Ressource beschränkt sich dann allein auf das definierende Element. Andere Elemente
können diese Ressource nicht nutzen. Diese Variante wird aufgrund ihrer begrenzten
Sichtbarkeit allerdings nur selten eingesetzt, muss aber der Vollständigkeit halber
erwähnt werden. Im folgenden Beispiel wird eine Ressource für ein Grid-Element und eine Ressource für ein Button-Element erstellt. Jede der beiden Ressourcen kann nur von dem Element genutzt werden,
das die Ressource definiert.
<Grid>
<Grid.Resources>
<!-- Ressourcen des Grids -->
</Grid.Resources>
<Button>
<Button.Resources>
<!-- Ressourcen der Schaltfläche -->
</Button.Resources>
</Button>
</Grid> - Wird eine logische Ressource in einem Window definiert, steht sie allen WPF-Elementen, die sich innerhalb des Fensters befinden,
gleichermaßen zur Verfügung. Sie müssen den Resources-Abschnitt manuell hinzufügen, er wird nicht automatisch erstellt.
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://..."
xmlns:x="http://..."
Title="MainWindow" Height="300" Width="350">
<Window.Resources>
<!-- Windows-eigene Ressourcen -->
</Window.Resources>
</Window> - Möchten Sie, dass eine logische Ressource von allen Elementen der Anwendung gleichermaßen
genutzt werden kann, muss die Ressource in der Datei App.xaml definiert werden. Der entsprechende Abschnitt ist dafür bereits per Vorgabe angelegt:
<Application x:Class="WpfApplication.App"
xmlns=http://...
xmlns:x=http://...
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
Die Resources-Eigenschaft wird von den meisten WPF-Elementen angeboten. Die einzige Bedingung ist, dass das entsprechende Element von FrameworkElement, FrameworkContentElement oder Application abgeleitet ist.
Die Eigenschaft Resources ist vom Typ ResourceDictionary. Dabei handelt es sich um eine Auflistung, die Objekte vom Typ Object beschreibt. Sie können also praktisch jedes .NET-Objekt in beliebiger Anzahl dieser Auflistung hinzufügen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.