Estoy buscando una manera de agregar texto de marcador de posición a un cuadro de texto como puede hacerlo con un cuadro de texto en html5.
Es decir, si el cuadro de texto no tiene texto, entonces agrega el texto Enter some text here
, cuando el usuario hace clic en él, el texto del marcador de posición desaparece y le permite al usuario ingresar su propio texto, y si el cuadro de texto pierde el foco y aún no hay texto, entonces el marcador de posición es agregado de nuevo al cuadro de texto.
c#
wpf
placeholder
Boardy
fuente
fuente
Respuestas:
¿No sería eso algo así?
Eso es solo pseudocódigo, pero el concepto está ahí.
fuente
RemoveText
y elAddText
método debe serpublic void
, falta vacío . Y como ha dicho @BibaswannBandyopadhyay, elRemoveText
método podría ser este:if (myTxtbx.Text == "Enter text here...") {myTxtbx.Text = "";}
Puede usar esto, está funcionando para mí y es una solución extremadamente simple.
Uso:
fuente
<ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="FocusManager.FocusedElement" TargetName="textSource" Value="{Binding RelativeSource={RelativeSource Self}}" /> </Trigger> </ControlTemplate.Triggers>
TextWrapping="wrap"
dos etiquetas TextBox en el Estilo, en caso de que desee hacer un TextBox de varias líneas con texto de marcador de posición como lo hice yo.<TextBox Text="{Binding Path=Text, RelativeSource=RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" MaxLength="{TemplateBinding MaxLength}" />
. En su caso, probablemente necesite agregarAcceptsReturn="{TemplateBinding AcceptsReturn}"
En lugar de manejar los eventos de entrada y salida de foco para establecer y eliminar el texto del marcador de posición, es posible usar la función Enviar
EM_SETCUEBANNER
mensaje de Windows para enviar un mensaje a nuestro cuadro de texto para hacer el trabajo por nosotros.Esto se puede hacer con dos sencillos pasos. Primero necesitamos exponer la
SendMessage
función de Windows .Luego simplemente llame al método con el identificador de nuestro cuadro de texto, el valor de EM_SETCUEBANNER y el texto que queremos establecer.
Referencia: Establecer texto de marcador de posición para el cuadro de texto (texto de referencia)
fuente
Agregue a esta clase su proyecto y cree su solución. Haga clic en Toolbox en Visual Studio, verá un nuevo componente de cuadro de texto llamado PlaceholderTextBox. Elimine su cuadro de texto actual en el formulario designado y reemplácelo con PlaceHolderTextBox.
PlaceHolderTextBox tiene una propiedad PlaceHolderText. Establezca el texto que desee y que tenga un buen día :)
fuente
Text
propiedad (por ejemplo, un cuadro de texto utilizado para filtrar una lista), el marcador de posición se utilizará para filtrar. El valor del marcador de posición solo debe usarse para mostrar, por lo tanto, no es una buena idea reemplazar laText
propiedad temporalmente.using System; using System.Drawing; using System.Windows.Forms;
Gracias por esto!Este no es mi código, pero lo uso mucho y funciona perfecto ... SOLO XAML
fuente
DataTrigger
el siguienteMultiDataTrigger
, funciona en mi humilde opinión:<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>
Propiedades adjuntas al rescate:
Uso:
fuente
PlaceholderColor
contypeof(Brush)
. Luego cambie latextBox.Foreground
propiedad en elShowPlaceholder
método y restaúrelo nuevamente en elHidePlaceholder
método.Si bien el uso del
EM_SETCUEBANNER
mensaje es probablemente más simple, una cosa que no me gusta es que el texto del marcador de posición desaparece cuando el control se enfoca. Ese es un motivo favorito mío cuando estoy completando formularios. Tengo que hacer clic para recordar para qué sirve el campo.Así que aquí hay otra solución para WinForms. Superpone una
Label
encima del control, que desaparece solo cuando el usuario comienza a escribir.Ciertamente no es a prueba de balas. Acepta cualquiera
Control
, pero solo lo he probado con aTextBox
. Puede necesitar modificaciones para trabajar con algunos controles. El método devuelve elLabel
control en caso de que necesite modificarlo un poco en un caso específico, pero puede que nunca sea necesario.Úselo así:
Aquí está el método:
fuente
Basado en la respuesta de ExceptionLimeCat, una mejora:
fuente
Puede obtener el valor predeterminado
Template
, modificarlo superponiendo aTextBlock
y usar aStyle
para agregar desencadenantes que lo ocultan y lo muestran en los estados correctos.fuente
Esto significaría que tiene un botón que le permite realizar una acción, como iniciar sesión o algo así. Antes de realizar la acción, verifica si el cuadro de texto está lleno. De lo contrario, reemplazará el texto
Es un poco cursi, pero verificar el texto por el valor que le está dando es lo mejor que puedo hacer en el cajero automático, no tan bueno en C # para obtener una mejor solución.
fuente
fuente
Se me ocurrió un método que funcionó para mí, pero solo porque estaba dispuesto a usar el nombre del cuadro de texto como marcador de posición. Vea abajo.
fuente
Aquí vengo con esta solución inspirada en @Kemal Karadag.
Noté que cada solución publicada aquí se basa en el enfoque,
Si bien quería que mi marcador de posición fuera el clon exacto de un marcador de posición HTML estándar en Google Chrome.
En lugar de ocultar / mostrar el marcador de posición cuando el cuadro está enfocado,
Oculto / muestro el marcador de posición según la longitud del texto del cuadro:
Si el cuadro está vacío, se muestra el marcador de posición, y si escribe en el cuadro, el marcador de posición desaparece.
Como se hereda de un cuadro de texto estándar, ¡puede encontrarlo en su Caja de herramientas!
fuente
Prueba el siguiente código:
fuente
txtUsuario.Attributes.Add ("marcador de posición", "Texto");
fuente
también puede hacerlo cuando el mouse hace clic, supongamos que el texto del marcador de posición es "Nombre_de_usuario"
fuente
fuente
En lugar de usar la propiedad .Text de un TextBox, superpuse un TextBlock con el marcador de posición. No pude usar la propiedad .Text porque estaba vinculada a un evento.
XAML:
VB.NET
Resultado:
fuente
También puedes intentarlo de esta manera ...
llama a la función
escribe esta función
fuente
hay MEJORES soluciones, pero la solución más fácil está aquí: establezca el texto del cuadro de texto en la cadena deseada y luego cree una función que elimine el texto, haga que esa función se active en el evento de enfoque de cuadro de texto.
fuente
Escribí un control personalizado reutilizable, tal vez pueda ayudar a alguien que necesite implementar múltiples cuadros de texto de marcador de posición en su proyecto.
Aquí está la clase personalizada con el ejemplo de implementación de una instancia, puede probar fácilmente pegando este código en un nuevo proyecto winforms usando VS:
fuente
Solución muy efectiva aquí para el control de WindowsForms TextBox. (No estoy seguro acerca de XAML).
Esto funcionará también en modo Multilínea.
Probablemente puede extenderse a otros controles, como el control ComboBox (no marcado)
fuente
Funciona de maravilla.
fuente