Silverlight Sonderzeichen in XAML und Textbox mit Wasserzeichen
Kommentare

Die Serie „Silverlight Expertise“ des dot.NET Magazins präsentiert monatlich zwei leckere top How-Tos zum Thema Silverlight von Gregor Biswanger, sodass Einsteiger und fortgeschrittene Silverlight-Experten durch geballtes Wissen gesättigt werden. Heute stehen auf der Menükarte „Umlaute und Sonderzeichen in XAML“ und „Textbox mit Wasserzeichen“. Viel Spaß und einen guten Appetit!

Menü 1 für Einsteiger: Umlaute und Sonderzeichen in XAML

Wenn unter XAML der Content-Text für Steuerelemente definiert wird und spezielle Charaktere wie „, & oder „“, angezeigt werden sollen, erhält man leider unangenehme Fehlermeldungen. Das heißt, es ist leider nicht möglich, folgenden XAML-Code zu verwenden: . Bei XAML verhält sich dasselbe Prinzip wie es unter HTML bereits mit Unicodes bekannt ist. Es muss lediglich mit einem &-Zeichen und Unicode, der mit einem ;-Strichpunk endet, deklariert werden (Tabelle 1).

 

Zeichen

Encoding

<

>

>

&

&

Space (Leerzeichen)

 

´

Nummerische Charakter

[integer]; oder [hex];

Nonbreaking Space (ohne Leerzeichen)

  (assuming UTF-8 encoding

Tabelle 1: Demonstration des Encodings

Somit muss zur korrekten Darstellung von der Code wie folgt deklariert werden: .

 

Menü 2 für Experten: Textbox mit Wasserzeichen

Für eine angenehmere Usability einer Textbox kann ein leicht angedeuteter Text als Wasserzeichen von Vorteil sein. Windows macht es mit dem Suchfeld unter dem Start-Bereich elegant vor. Um nun dieselbe Funktionalität einer Textbox unter Silverlight zu erreichen, sind nur wenige Zeilen Code nötig. Zu Beginn soll der gewünschten Textbox bereits das Wasserzeichen manuell festgelegt werden. Dazu wird in XAML der Text, der Tag mit dem gleichen Text und eine Textfarbe mit grau deklariert. Wenn das Projekt gestartet wird und man klickt auf die Textbox, verschwindet der Text und die Farbeinstellung leider nicht von allein. Deshalb muss man hierbei selbst Hand anlegen, indem die beiden Events GotFocus und LostFocus abonniert werden (Listing 1).

 

 

  

Anschließend werden in den beiden Events der Eintritt (GotFocus) und das Verlassen (LostFocus) der Textbox abgefangen. Beim Eintritt muss überprüft werden, ob der aktuelle Text noch dem Text für das Wasserzeichen entspricht. Dabei hilft die gleiche Textvergabe im Tag Property. Wenn der Text dem entspricht, wird die Textbox mit dem Inhalt geleert und die Textfarbe wieder auf schwarz gesetzt. Andernfalls wird beim Verlassen der Textbox bei keinem Inhalt das Wasserzeichen wieder hergestellt (Listing 2).

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox actualTextBox = (TextBox)sender;
    if(actualTextBox.Text == (string)actualTextBox.Tag)
    {
        actualTextBox.Text = string.Empty;
        actualTextBox.Foreground = new SolidColorBrush(Colors.Black);
        actualTextBox.FontStyle = FontStyles.Normal;
    }
}

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox actualTextBox = (TextBox)sender;
    if(actualTextBox.Text == string.Empty)
    {
        actualTextBox.Text = (string)actualTextBox.Tag;
        actualTextBox.Foreground = new SolidColorBrush(Colors.Gray);
        actualTextBox.FontStyle = FontStyles.Italic;
    }
}  

Das fertige Ergebnis sieht dann wie in Abbildung 1 aus. Nicht ganz so elegant ist die immer wiederkehrende Implementierung, wenn die Wasserzeichenfunktionalität öfter benötigt wird. Daher empfiehlt es sich, daraus ein Behavior zu schreiben. Wie das Ganze im Detail umgesetzt wird, kann man auf dem Blog des Autors erfahren.

Abb. 1: Ein Textblocksteuerelement mit einem Wasserzeichentext
Abb. 1: Ein Textblocksteuerelement mit einem Wasserzeichentext

Gregor Biswanger ist Microsoft MVP für Client App Dev und arbeitet als Solution Architect und Silverlight-Experte der Firma impuls Informationsmanagement GmbH aus Nürnberg. Seine Schwerpunkte liegen im Bereich der .NET-Architektur, Silverlight und agilen Prozessen. Biswanger ist außerdem freier Autor, Speaker und Microsoft CLIPler der Ingolstädter .NET Developers Group. Sie erreichen seinen Blog unter http://www.dotnet-blog.net.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -