Em um TextBox WPF posso fazer personagens em uma cadeia que ultrapassem um certo comprimento ficam vermelhos?

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

Pergunta

Eu estou usando um controle TextBox e deseja que os caracteres vermelhos depois de um certo número de caracteres para mostrar aos usuários que digitou demais. Eu não quero para truncar como o usuário pode ter digitado que "pensamento realmente importante" e se eu truncado eles iriam perder. Tenho validação no meu modelo de negócio subjacente que me diz quando a entrada é inválida e eu estilo meu TextBox para show de invalidez.

Eu quero Style o texto também. Posso fazer isso usando um TextBox, ou que eu preciso para ir a um RichTextBox? Meu valor subjacente é apenas uma corda em linha reta.

Foi útil?

Solução

Eu suponho que você está usando o mecanismo de validação estoque WPF - ValidationRules. Se assim for, você deve definir um Trigger em Validation.HasError == true e defina as propriedades TextBox conforme necessário. Por exemplo, o seguinte irá destacar o texto com vermelho se é invá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>

Outras dicas

Este é um tipo de resposta louco e eu não tentei ainda, mas se ele funciona, você seria capaz de continuar a usar uma caixa de texto em vez de uma caixa de texto rico.

E se você usar um pincel de gradiente para pintar o texto (ou se não o texto, o fundo de caixa de texto, se isso fosse aceitável para você).

Você iria construir o gradiente de modo que era um verde para o ponto de entrada tem muito tempo e vermelho após-alas. É claro até que o texto ficou muito tempo o pincel seria tudo branco.

Isto envolveria medição texto para obter o direito de definição do gradiente (desde fontes proporcionais faria com que a área válida para ser um tamanho diferente dependendo das letras digitadas) e exigiria a escova ser calculado e atribuído a cada caractere digitado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top