Type Converter in WPF/C#

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Type Converter in WPF/C#

Manche Eigenschaften eines .xaml-Dokuments sind sehr flexibel. Für die Eigenschaft Margin beispielsweise können Sie ganz verschiedenen Werte angeben – zum Beispiel einfach den Wert 5, um Abstände in alle vier Richtungen zu erhalten oder auch die Zeichenkette 5,0,5,0, um nur einen linken und einen rechten Abstand abzubilden. Auch andere Eigenschaften nehmen durchaus unterschiedliche Werte entgegen, zum Beispiel solche zur Angabe von Farben. Wenn man genauer hinsieht, stellt man schnell fest, dass man da Attributen, die völlig anderen Typs sind, ein String-Literal zuweist. Warum das hier gelingt, beschreibt der vorliegende Artikel.

Type Converter am Beispiel von Abständen

Ein Beispiel für die Angabe eines Strings für ein Attribut mit einem anderen Datentyp als String ist das Attribut Margin.

Wenn wir einmal einen Button nur mit einem Rand ausstatten, der laut unserer Angabe den Abstand 5 von der linken und rechten und den Abstand 10 von der oberen und unteren Kante des übergeordneten Elements aufweist, dann erhalten wir einen Button wie in Bild 1. Der Code sieht indes so aus:

Ein Button-Element mit verschiedenen Margin-Werten

Bild 1: Ein Button-Element mit verschiedenen Margin-Werten

<Button Margin="5,10,5,10">

Wenn Sie im .xaml-Code einmal mit der rechten Maustaste auf das Attribut Margin klicken und dann den Eintrag Gehe zu Definition aus dem Kontextmenü auswählen, erscheint der Dialog aus Bild 2. Hier wird schnell deutlich, dass Margin keinesfalls den Datentyp String aufweist, sondern vielmehr den Datentyp System.Windows.Thickness. Wir müssten dieser Eigenschaft also normalerweise eine Struktur des Typs Thickness übergeben! Diese Struktur weist wiederum die vier Eigenschaften Bottom, Left, Right und Top auf.

Definition der Eigenschaft Margin

Bild 2: Definition der Eigenschaft Margin

Margin unter C#

Um zu verdeutlichen, dass wir hier grundsätzlich einen nicht passenden Wert übergeben, wenn wir einen Zahlenwert oder auch einen String wie 5,10,5,10 angeben, schauen wir uns das Anlegen eines Buttons mit dieser Eigenschaft unter C# an.

Dazu erstellen wir mit der new-Anweisung ein neues Objekt des Typs Button und referenzieren dieses mit der Variablen btn. Danach weisen wir diesem genau wie in im .xaml-Code den Wert „5, 10, 5, 10“ für die Eigenschaft Margin zu. Der gemeldete Fehler zeigt, dass String nicht in Thickness konvertiert werden kann (siehe Bild 3).

Unter C# kann der Eigenschaft Margin kein String übergeben werden.

Bild 3: Unter C# kann der Eigenschaft Margin kein String übergeben werden.

Was aber ist nun unter C# anders als im .xaml-Code? Der Unterschied ist, dass im .xaml-Code automatisch ein sogenannter Type Converter agiert und den angegebenen String in die gewünschten Werte umwandelt und zuweist.

Logisch, dass Sie hier nun auch nicht irgendeine Zeichenkette angeben können, sondern dass diese durchaus einen bis vier durch Kommata getrennte Zahlenwerte enthalten muss.

Wie geben wir die Werte nun unter C# ein? Dies erledigen wir, indem wir zunächst ein Objekt des Typs Thickness erstellen und seinen Eigenschaften Bottom, Top, Left und Right die gewünschten Zahlenwerte zuweisen.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]