Allgemein Für Administratoren Für Architekten Für Entwickler Für Projektleiter Für Tester News Produkte Publikationen
X
Martin Kleine

Martin Kleine

Attached Dependency Properties – jeder nutzt sie aber wer kennt sie?

Freitag, 10. Juli 2015

Jeder hat bereits die Attached Dependency Properties genutzt, einige vermutlich ohne zu wissen dass es welche sind. Folgendes Beispiel kennt sicherlich jeder:

Beispiel ADP

 

Um UI-Elemente zu positionieren wird häufig ein Grid verwendet. Um Elemente darin anzuordnen werden die Attached Dependency Properties Grid.Row und Grid.Column benutzt. Beide sind keine Eigenschaft der Klasse Button, sondern werden dem Button durch das Grid zur Verfügung gestellt.

Das häufigste Szenario für dieses Konzept ist das Layout. Dabei können Elemente einzeln Layout Anforderungen gegenüber ihren übergeordneten Elementen ausdrücken. Dabei legt jedes Element einen Eigentschaftswert (z.B. Grid.Column) fest, den das übergeordnete Element als eine angefügte Eigenschaft definiert. Gäbe es diese Art von Properties nicht, könnte man nicht festlegen wo in einem Grid ein Element angezeigt werden soll.

Wie wird jetzt so ein Attached Dependency Property definiert?

Beispiel Grid

Der Quellcode zeigt wie ein Attached Property „Column“ im Grid definiert wurde.

Anderes Beispiel: In einer Anwendung brauchen wir verschiedene Elemente die rotiert werden sollen. Die folgenden Screenshots zeigen einen Button der um 45° gedreht wurde.

Button gedrehtButton ohne ADP

Der Quellcode dazu besteht aus 5 Zeilen Code, statt nur einer für den Button. Jedes andere UIElement, das ebenfalls gedreht werden soll, braucht ebenfalls diese extra Zeilen Code. Mit einem Attached Dependency Property würden wir im XAML Code auf nur einen Zeile insgesamt kommen. Dafür benötigen wir aber eine eigene Klasse, die wir RenderTransformManager nennen und von DependencyObjekt ableiten.

RenderTransformManager

Sie braucht 4 Dinge:

1. Ein DependencyProperty, das als Attached registriert wird.

2. Eine statische Getter Methode.

3. Eine statische Setter Methode.

4. Eine Methode, die das UIElement dreht.

Die statischen Getter und Setter Methoden werden benötigt um aus dem Code auf den Wert zugreifen zu können. Damit sich das UIElement auch dreht, muss den Metadaten des Dependency Property noch eine Methode angegeben werden, die aufgerufen wird, wenn sich der Wert ändert und die das DependencyObject (hier der Button) auch wirklich dreht. Dies geschieht in der Methode OnAngleChanged. Das Element, das die Wert-Änderung aufgerufen hat, wird als DependendcyObject automatisch durch den Aufruf mit übergeben. Auf ihm können wir dann die Rotation ausführen.

Mit diesem Attached Dependency Property sieht der Button nun wie folgt aus:

Button mit ADP

Und mit dem Ausdruck my:RenderTransformManager.Angle=“45“ lässt sich jedes Objekt nun drehen was vom DependencyObject abgeleitet ist.

Verwandte Artikel:

Benötigen Sie Unterstützung bei der Software-Entwicklung und Architektur von .NET basierten Lösungen oder bei Einführung und Anpassung von Visual Studio / Microsoft Test Manager / Team Foundation Server?

Wir stehen Ihnen unter info(at)aitgmbh.de gerne zur Verfügung.

Tags: ,

Hinterlasse eine Antwort