Ich suche nach einer Möglichkeit, einem Textfeld Platzhaltertext hinzuzufügen, wie Sie es mit einem Textfeld in HTML5 können.
Wenn das Textfeld keinen Text enthält, wird der Text hinzugefügt. Enter some text here
Wenn der Benutzer darauf klickt, verschwindet der Platzhaltertext und der Benutzer kann seinen eigenen Text eingeben. Wenn das Textfeld den Fokus verliert und noch kein Text vorhanden ist, ist der Platzhalter vorhanden wieder zum Textfeld hinzugefügt.
c#
wpf
placeholder
Boardy
quelle
quelle
Antworten:
Wäre das nicht einfach so?
Das ist nur Pseudocode, aber das Konzept ist da.
quelle
RemoveText
undAddText
Methode sollte seinpublic void
, fehlende Leere . Und wie @BibaswannBandyopadhyay gesagt hat, könnte dieRemoveText
Methode folgende sein:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Sie können dies verwenden, es funktioniert für mich und ist eine extrem einfache Lösung.
Verwendung:
.
quelle
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
beide TextBox-Tags im Stil anheften, falls Sie wie ich eine mehrzeilige TextBox mit Platzhaltertext erstellen möchten.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. In Ihrem Fall müssen Sie wahrscheinlich hinzufügenAcceptsReturn="{TemplateBinding AcceptsReturn}"
Anstatt die Ereignisse zum Eingeben und Verlassen des Fokus zu behandeln, um den Platzhaltertext festzulegen und zu entfernen, können Sie mit der Windows-Funktion SendMessage eine
EM_SETCUEBANNER
Nachricht an unser Textfeld senden , um die Arbeit für uns zu erledigen.Dies kann in zwei einfachen Schritten erfolgen. Zuerst müssen wir die Windows-
SendMessage
Funktion verfügbar machen .Rufen Sie dann einfach die Methode mit dem Handle unseres Textfelds, dem Wert von EM_SETCUEBANNER und dem Text auf, den Sie festlegen möchten.
Referenz: Platzhaltertext für Textfeld festlegen (Cue-Text)
quelle
Fügen Sie dieser Klasse Ihr Projekt hinzu und erstellen Sie Ihre Lösung. Klicken Sie in Visual Studio auf Toolbox. Daraufhin wird eine neue Textboxkomponente mit dem Namen PlaceholderTextBox angezeigt. Löschen Sie Ihr aktuelles Textfeld im Formularentwurf und ersetzen Sie es durch PlaceHolderTextBox.
PlaceHolderTextBox hat eine Eigenschaft PlaceHolderText. Setze einen beliebigen Text und wünsche dir einen schönen Tag :)
quelle
Text
Eigenschaft einwirkt (z. B. ein Textfeld zum Filtern einer Liste), wird der Platzhalter zum Filtern verwendet. Der Platzhalterwert sollte nur zur Anzeige verwendet werden. Daher ist es nicht ratsam, dieText
Eigenschaft vorübergehend zu ersetzen .using System; using System.Drawing; using System.Windows.Forms;
Danke dafür!Dies ist nicht mein Code, aber ich benutze ihn oft und er funktioniert perfekt ... NUR XAML
quelle
DataTrigger
indem Sie den folgenden ersetzenMultiDataTrigger
, funktioniert es meiner bescheidenen Meinung nach noch besser:<MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsFocused, ElementName=Textbox}" Value="false" /><Condition Binding="{Binding Text, ElementName=Textbox}" Value="" /></MultiDataTrigger.Conditions><MultiDataTrigger.Setters> <Setter Property="Visibility" Value="Visible"/></MultiDataTrigger.Setters></MultiDataTrigger>
Angehängte Eigenschaften zur Rettung:
Verwendung:
quelle
PlaceholderColor
mit dem Namen hinzufügentypeof(Brush)
. Ändern Sie dann dietextBox.Foreground
Eigenschaft in derShowPlaceholder
Methode und stellen Sie sie in derHidePlaceholder
Methode wieder her.Während die Verwendung der
EM_SETCUEBANNER
Nachricht wahrscheinlich am einfachsten ist, gefällt mir nicht, dass der Platzhaltertext verschwindet, wenn das Steuerelement den Fokus erhält. Das ist ein kleiner Ärger von mir, wenn ich Formulare ausfülle. Ich muss darauf klicken, um mich daran zu erinnern, wofür das Feld ist.Hier ist eine weitere Lösung für WinForms. Es überlagert ein
Label
Steuerelement, das erst verschwindet, wenn der Benutzer mit der Eingabe beginnt.Es ist sicherlich nicht kugelsicher. Es akzeptiert keine
Control
, aber ich habe nur mit einem getestetTextBox
. Möglicherweise müssen Änderungen vorgenommen werden, um mit einigen Steuerelementen zu arbeiten. Die Methode gibt dasLabel
Steuerelement zurück, falls Sie es in einem bestimmten Fall ein wenig ändern müssen, dies wird jedoch möglicherweise nie benötigt.Verwenden Sie es so:
Hier ist die Methode:
quelle
Basierend auf der Antwort von ExceptionLimeCat eine Verbesserung:
quelle
Sie können die Standardeinstellung
Template
abrufen, durch Überlagern von a ändernTextBlock
und mit aStyle
Trigger hinzufügen, die sie in den richtigen Zuständen ausblenden und anzeigen.quelle
Dies würde bedeuten, dass Sie eine Schaltfläche haben, mit der Sie eine Aktion ausführen können, z. B. Anmelden oder ähnliches. Bevor Sie die Aktion ausführen, überprüfen Sie, ob das Textfeld ausgefüllt ist. Wenn nicht, wird der Text ersetzt
Es ist ein bisschen kitschig, aber den Text auf den Wert zu überprüfen, den Sie ihm geben, ist das Beste, was ich tun kann, atm, nicht so gut in c #, um eine bessere Lösung zu finden.
quelle
quelle
Ich habe eine Methode entwickelt, die für mich funktioniert, aber nur, weil ich bereit war, den Textfeldnamen als Platzhalter zu verwenden. Siehe unten.
quelle
Hier komme ich mit dieser Lösung, die von @Kemal Karadag inspiriert wurde.
Mir ist aufgefallen, dass jede hier veröffentlichte Lösung auf dem Fokus beruht.
Ich wollte, dass mein Platzhalter der exakte Klon eines Standard-HTML-Platzhalters in Google Chrome ist.
Anstatt den Platzhalter auszublenden / anzuzeigen, wenn das Feld fokussiert ist,
Ich verstecke / zeige den Platzhalter abhängig von der Textlänge des Feldes:
Wenn das Feld leer ist, wird der Platzhalter angezeigt, und wenn Sie das Feld eingeben, verschwindet der Platzhalter.
Da es von einer Standard-TextBox geerbt wurde, finden Sie es in Ihrer Toolbox!
quelle
Versuchen Sie den folgenden Code:
quelle
txtUsuario.Attributes.Add ("Platzhalter", "Texto");
quelle
Sie können dies auch tun, wenn die Maus klickt. Nehmen wir an, Ihr Platzhaltertext lautet "User_Name".
quelle
quelle
Anstatt die .Text-Eigenschaft einer TextBox zu verwenden, habe ich einen TextBlock mit dem Platzhalter überlagert. Ich konnte die .Text-Eigenschaft nicht verwenden, da diese an ein Ereignis gebunden war.
XAML:
VB.NET
Ergebnis:
quelle
Sie können es auch auf diese Weise versuchen ..
Rufen Sie die Funktion auf
schreibe diese Funktion
quelle
Es gibt BESSERE Lösungen, aber die einfachste Lösung ist hier: Setzen Sie den Textfeldtext auf die gewünschte Zeichenfolge und erstellen Sie eine Funktion, die den Text löscht. Lassen Sie diese Funktion im Textfeld aktivieren. Fokus Eingabe-Ereignis
quelle
Ich habe ein wiederverwendbares benutzerdefiniertes Steuerelement geschrieben. Vielleicht kann es jemandem helfen, der mehrere Platzhalter-Textfelder in seinem Projekt implementieren muss.
Hier ist die benutzerdefinierte Klasse mit dem Implementierungsbeispiel einer Instanz. Sie können sie einfach testen, indem Sie diesen Code mit VS in ein neues Winforms-Projekt einfügen:
quelle
Sehr effektive Lösung hier für Windows Boxsteuerelement Text. (nicht sicher über XAML).
Dies funktioniert auch im Multililine-Modus.
Möglicherweise kann es für andere Steuerelemente wie das ComboBox-Steuerelement erweitert werden (nicht aktiviert).
quelle
Klappt wunderbar.
quelle