Em um TextBox WPF posso fazer personagens em uma cadeia que ultrapassem um certo comprimento ficam vermelhos?
-
05-07-2019 - |
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.
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.