En un cuadro de texto de wpf, ¿puedo hacer que los caracteres de una cadena que excedan de cierta longitud se vuelvan rojos?

StackOverflow https://stackoverflow.com/questions/1204412

Pregunta

Estoy usando un control TextBox y quiero que los caracteres se vuelvan rojos después de un cierto número de caracteres para mostrar a los usuarios que han escrito demasiado. No quiero truncar ya que el usuario podría haber escrito ese " pensamiento realmente importante " y si los truncaba lo perderían. Tengo una validación en mi modelo de negocio subyacente que me dice cuándo la entrada no es válida y yo estilo mi TextBox para mostrar la invalidez.

También quiero Style el texto. ¿Puedo hacer esto con un TextBox , o tengo que ir a un RichTextBox ? Mi valor subyacente es solo una cadena recta.

¿Fue útil?

Solución

Supongo que está utilizando el mecanismo de validación de stock de WPF - ValidationRules . Si es así, debe definir un Trigger en Validation.HasError == true y configurar TextBox según sea necesario. Por ejemplo, lo siguiente resaltará el texto en rojo si no es válido.

<TextBox>
  <TextBox.Text>
    <Binding ...>
      <Binding.ValidationRules>
        ...
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
  <TextBox.Style>
    <Style TargetType="{x:Type TextBox}">
      <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
          <Setter Property="Foreground" Value="Red" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </TextBox.Style>
</TextBox>

Otros consejos

Esta es una especie de respuesta loca y no la he probado todavía, pero si funciona, podrías seguir usando un cuadro de texto en lugar de un cuadro de texto rico.

¿Qué sucede si utiliza un pincel de degradado para pintar el texto (o, si no lo es, el fondo del cuadro de texto, si eso le parece aceptable)?

Construiría el gradiente de modo que estuviera en blanco hasta el punto en que la entrada fuera demasiado larga y roja después de la entrada. Por supuesto, hasta que el texto fuera demasiado largo, el pincel sería todo blanco.

Esto implicaría la medición de texto para obtener la definición de gradiente correcta (ya que las fuentes proporcionales harían que el área válida tenga un tamaño diferente dependiendo de las letras ingresadas) y requeriría que el pincel se calcule y asigne en cada carácter ingresado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top