Je cherche un moyen d'ajouter du texte d'espace réservé à une zone de texte comme vous le pouvez avec une zone de texte en html5.
C'est-à-dire que si la zone de texte n'a pas de texte, elle ajoute le texte Enter some text here
, lorsque l'utilisateur clique dessus, le texte de l'espace réservé disparaît et permet à l'utilisateur d'entrer son propre texte, et si la zone de texte perd le focus et qu'il n'y a toujours pas de texte, l'espace réservé est ajouté à la zone de texte.
c#
wpf
placeholder
Boardy
la source
la source
Réponses:
Ne serait-ce pas quelque chose comme ça:
C'est juste un pseudo-code mais le concept est là.
la source
RemoveText
et laAddText
méthode devrait êtrepublic void
, vide manquant . Et comme @BibaswannBandyopadhyay l'a dit, laRemoveText
méthode pourrait être la suivante:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Vous pouvez l'utiliser, cela fonctionne pour moi et c'est une solution extrêmement simple.
Usage:
la source
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
sur les deux balises TextBox dans le style, au cas où vous voudriez faire une TextBox multiligne avec du texte d'espace réservé comme je l'ai fait.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. Dans votre cas, vous devez probablement ajouterAcceptsReturn="{TemplateBinding AcceptsReturn}"
Au lieu de gérer les événements d'entrée et de sortie de focus afin de définir et de supprimer le texte de l'espace réservé, il est possible d'utiliser la fonction Windows SendMessage pour envoyer un
EM_SETCUEBANNER
message à notre zone de texte afin de faire le travail à notre place.Cela peut être fait en deux étapes faciles. Nous devons d'abord exposer la
SendMessage
fonction Windows .Ensuite, appelez simplement la méthode avec le handle de notre zone de texte, la valeur de EM_SETCUEBANNER et le texte que nous voulons définir.
Référence: définir le texte de l'espace réservé pour la zone de texte (texte de repère)
la source
Ajoutez cette classe à votre projet et créez votre solution. Cliquez sur Toolbox sur Visual Studio, vous verrez un nouveau composant de zone de texte nommé PlaceholderTextBox. Supprimez votre zone de texte actuelle sur la conception du formulaire et remplacez-la par PlaceHolderTextBox.
PlaceHolderTextBox a une propriété PlaceHolderText. Définissez le texte que vous voulez et passez une bonne journée :)
la source
Text
propriété (par exemple une zone de texte utilisée pour filtrer une liste), l'espace réservé sera utilisé pour le filtrage. La valeur d'espace réservé ne doit être utilisée que pour l'affichage, il n'est donc pas judicieux de remplacerText
temporairement la propriété.using System; using System.Drawing; using System.Windows.Forms;
Merci pour cela!Ce n'est pas mon code, mais je l'utilise beaucoup et cela fonctionne parfaitement ... XAML UNIQUEMENT
la source
DataTrigger
par le suivantMultiDataTrigger
, cela fonctionne encore mieux à mon humble avis:<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>
Propriétés attachées à la rescousse:
Usage:
la source
PlaceholderColor
avectypeof(Brush)
. Modifiez ensuite latextBox.Foreground
propriété de laShowPlaceholder
méthode et restaurez-la dans laHidePlaceholder
méthode.Lors de l'utilisation du
EM_SETCUEBANNER
message soit probablement la plus simple, une chose que je n'aime pas est que le texte d'espace réservé disparaît lorsque le contrôle obtient le focus. C'est une bête noire à moi quand je remplis des formulaires. Je dois cliquer dessus pour me souvenir à quoi sert le champ.Voici donc une autre solution pour WinForms. Il superpose un
Label
au-dessus du contrôle, qui disparaît uniquement lorsque l'utilisateur commence à taper.Ce n'est certainement pas à l'épreuve des balles. Il en accepte tous
Control
, mais je n'ai testé qu'avec unTextBox
. Il peut avoir besoin de modifications pour fonctionner avec certains contrôles. La méthode retourne leLabel
contrôle au cas où vous auriez besoin de le modifier un peu dans un cas spécifique, mais cela peut ne jamais être nécessaire.Utilisez-le comme ceci:
Voici la méthode:
la source
Sur la base de la réponse d'ExceptionLimeCat, une amélioration:
la source
Vous pouvez obtenir la valeur par défaut
Template
, la modifier en superposant aTextBlock
, et utiliser aStyle
pour ajouter des déclencheurs qui la masquent et la montrent dans les bons états.la source
Cela signifierait que vous avez un bouton qui vous permet de faire une action, comme la connexion ou quelque chose. Avant de faire l'action, vérifiez si la zone de texte est remplie. Sinon, elle remplacera le texte
C'est un peu ringard, mais vérifier le texte pour la valeur que vous lui donnez est le mieux que je puisse faire atm, pas si bon en c # pour obtenir une meilleure solution.
la source
la source
J'ai proposé une méthode qui a fonctionné pour moi, mais uniquement parce que j'étais prêt à utiliser le nom de la zone de texte comme espace réservé. Voir ci-dessous.
la source
Ici, je viens avec cette solution inspirée de @Kemal Karadag.
J'ai remarqué que chaque solution publiée ici repose sur l'objectif,
Alors que je voulais que mon espace réservé soit le clone exact d'un espace réservé HTML standard dans Google Chrome.
Au lieu de masquer / afficher l'espace réservé lorsque la zone est focalisée,
Je masque / affiche l'espace réservé en fonction de la longueur du texte de la boîte:
Si la zone est vide, l'espace réservé est affiché et si vous tapez dans la zone, l'espace réservé disparaît.
Comme il est hérité d'une TextBox standard, vous pouvez le trouver dans votre Toolbox!
la source
Essayez le code suivant:
la source
txtUsuario.Attributes.Add ("espace réservé", "Texto");
la source
vous pouvez également le faire lorsque la souris clique, supposons que votre texte d'espace réservé soit "User_Name"
la source
la source
Au lieu d'utiliser la propriété .Text d'un TextBox, j'ai superposé un TextBlock avec l'espace réservé. Je n'ai pas pu utiliser la propriété .Text car elle était liée à un événement.
XAML:
VB.NET
Résultat:
la source
Vous pouvez également essayer de cette manière.
appeler la fonction
écrivez cette fonction
la source
il existe de MEILLEURES solutions, mais la solution la plus simple est ici: définissez le texte de la zone de texte sur la chaîne souhaitée, puis créez une fonction qui supprime le texte, activez cette fonction sur la zone de texte Focus Enter event
la source
J'ai écrit un contrôle personnalisé réutilisable, peut-être qu'il peut aider quelqu'un qui a besoin d'implémenter plusieurs zones de texte d'espace réservé dans son projet.
voici la classe personnalisée avec exemple d'implémentation d'une instance, vous pouvez tester facilement en collant ce code sur un nouveau projet winforms en utilisant VS:
la source
Solution très efficace ici pour le contrôle TextBox de WindowsForms. (pas sûr de XAML).
Cela fonctionnera également en mode multiligne.
Il peut probablement être étendu pour d'autres contrôles, comme le contrôle ComboBox (non coché)
la source
Fonctionne comme un charme.
la source