Beim Durchsuchen der MSDN-Dokumentation stoßen Sie möglicherweise auf dieses Juwel: TextBox.Watermark.
"Awesome! Ich wollte eine integrierte Möglichkeit, Wasserzeichen auf meinen Textfeldern zu erstellen! Das ist großartig, lass mich weitermachen und setze das in XAML!"
%Vor%Wenn Sie das ausführen, bekommen Sie leider nicht, was Sie erwarten:
Und das Detail:
Was ist das? Sehen Sie sich die MSDN-Dokumentation genau an:
Das stimmt. Es wird in Silverlight 4 unterstützt, aber es sagt auch "Verwenden Sie nicht in einer Silverlight 4-Anwendung". Wenn Sie es verwenden, erhalten Sie eine System.NotImplemented-Ausnahme. Um dies zu überprüfen, ist hier der Code für die über Reflector dekompilierte Eigenschaft:
%Vor%Da ist es - es löst eine Ausnahme aus, wenn es nicht im Entwurfsmodus ist. Das ergibt keinen Sinn oder? Warum sollte Microsoft das tun?
Leider habe ich noch keine definitive Antwort gefunden, aber wenn ich raten musste, ist es, weil Microsoft plant, ein Watermark-Verhalten für das TextBox-Steuerelement in einer zukünftigen Version (vielleicht v5) zu implementieren und diese Eigenschaft effektiv reservieren wollte Steuerelemente von Drittanbietern erstellen keine Unterklasse von TextBox und erstellen ihre eigene Watermark-Eigenschaft. Ich kenne mindestens einen Steuerelementanbieter, ComponentOne, der über ein Steuerelement verfügt, das von TextBox erbt und eine Watermark-Eigenschaft bereitstellt. Mir scheint, dass dies Microsofts Methode ist, Leute davon abzuhalten, diesen Eigenschaftsnamen für ihre eigenen TextBox-Unterklassen zu verwenden.
Erstellen Sie ein Klassenbibliotheksprojekt. Add Class File verwenden Sie den folgenden Code ..... Danach fügen Sie die In dieser DLL In Ihrem Projekt.
%Vor%XAML:
%Vor%Ich habe @mani kandans Lösung leicht überarbeitet, um den Konstruktionszeitfehler zu beheben, wenn die Wasserzeicheneigenschaft nicht gesetzt ist. Außerdem wurde eine HasValue-Boolean-Eigenschaft hinzugefügt, um leicht überprüfen zu können, ob der Benutzer Text in die TextBox eingegeben hat, und zuletzt geändert wurde, um Einträge mit allen Whitespaces als Nicht-Einträge zu behandeln (d. H. Weiterhin Wasserzeichen anzuzeigen).
Überarbeiteter Code:
%Vor%Nun, Sie können es erfolgreich in Silverlight 5
verwendenProbieren Sie diesen Link aus: TextBox.Watermark
Ich verwende erfolgreich die WatermarkTextBox in einer Silverlight 5 MVVM-Anwendung.
Erstellen Sie ein Klassenbibliotheksprojekt. Fügen Sie Klassendatei mit dem folgenden Code hinzu
%Vor%XAML:
%Vor%Sehen Sie sich dies anhand von Verhaltensweisen an
%Vor%XAML
%Vor%Tags und Links .net silverlight-4.0