29 Benutzerdefinierte Controls
Sicherlich hat der eine oder andere Leser dieses Buches bereits Erfahrungen mit der WinForm-API gemacht. Dann werden Sie auch wissen, dass die Entwicklung eigener Steuerelemente mit dieser Technologie sehr detaillierte Kenntnisse erforderlich machte und darüber hinaus auch sehr zeitaufwendig war – selbst dann, wenn nur die äußerliche Präsentation verändert werden musste. Die vergangenen Kapitel haben gezeigt, dass es sehr einfach ist, mit der WPF das Erscheinungsbild der Controls zu beeinflussen. Die Techniken, die das ermöglichen, sind Styles, ControlTemplates und auch die DataTemplates.
Sie können auch auf verhältnismäßig einfache Weise benutzerdefinierte Steuerelemente in der WPF erstellen. Im Vergleich zu den Änderungen mit den erwähnten Techniken können Sie mit benutzerdefinierten Steuerelementen auch die Funktionalität und Verhaltensweisen ändern oder ergänzen, seien es Eigenschaften, Methoden oder Ereignisse. Genau das soll in diesem Kapitel gezeigt werden, ohne dabei aber die eigentliche Darstellung vollkommen eigenständig vorzunehmen. Wir werden daher nur bereits vorhandene Controls nutzen, um daraus ein eigenes Steuerelement mit allerdings auch eigenen spezifischen Verhaltensweisen zu entwickeln.
29.1 Erstellen eines benutzerdefinierten Steuerelements
Sie können ein benutzerdefiniertes Steuerelement in einem üblichen WPF-Projekt neu anlegen. Empfehlenswert ist die Vorgehensweise jedoch nicht, da das Control dann auch nur innerhalb der aktuellen Anwendung zur Verfügung steht. Eine allgemeinere und damit auch bessere Lösung ist es, das neue Steuerelement in einer Klassenbibliothek zu hinterlegen und es innerhalb einer Projektmappe zu testen. Änderungen lassen sich dann sehr einfach testen, mögliche Fehlerquellen sind schneller lokalisiert.
Das wollen wir nun auch konkretisieren und dabei ein Steuerelement entwickeln, das es in einer WPF-Anwendung ermöglicht, mit drei Schiebereglern (Slider-Elemente) den RGB-Anteil mit Schiebereglern zu einer Farbe zu mischen, die in einer vordefinierten Fläche innerhalb des Steuerelements angezeigt wird. Wir wollen den Typ des von uns entwickelten Controls ColorMixer nennen. Dazu legen wir uns zuerst ein neues Projekt an, wie in Abbildung 29.1 zu sehen ist.
Abbildung 29.1 Anlegen des Beispiels »ColorMixerSolution«
Im Code-Editor wird anschließend die Struktur einer Klasse UserControl1 angezeigt, die von der Basis UserControl abgeleitet ist:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
}
Listing 29.1 Grundstruktur eines UserControls
Da unsere Klasse ColorMixer heißen soll, müssen wir eine entsprechende Anpassung vornehmen und dürfen dabei weder den Konstruktor vergessen noch die entsprechende Änderung in der XAML-Datei.
Die Anforderungen, die an dieses Beispiel gestellt werden, seien wie folgt beschrieben:
- In einer Fläche soll eine Farbe angezeigt werden, die über drei Schieberegler reguliert wird, die die Farbanteile Rot, Grün und Blau beschreiben.
- Die aus den Farbanteilen gebildete Farbe soll durch die Eigenschaft Color veröffentlicht werden.
- Auch die Farbanteile seien über Eigenschaften separat einstellbar. Die entsprechenden Eigenschaften sollen Red, Green und Blue heißen.
- Es soll ein Ereignis ausgelöst werden, um damit zu signalisieren, dass sich die Eigenschaft Color geändert hat.
- Über ein Command-Objekt soll der Anwender die Möglichkeit haben, zu der vorherigen Farbeinstellung zurückzuwechseln.
Die Anforderungen machen es erforderlich, neben Abhängigkeitseigenschaften (Dependency Properties) und einem Routed Event auch ein Kommando bereitzustellen. Damit kommen noch einmal in einem Beispiel die Themen der Kapitel 26, 27 und 28 ins Spiel.
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.