In una TextBox di wpf posso rendere rossi i caratteri di una stringa che superano una certa lunghezza?
-
05-07-2019 - |
Domanda
Sto usando un controllo TextBox
e voglio che i caratteri diventino rossi dopo un certo numero di caratteri per mostrare agli utenti che hanno digitato troppo. Non voglio troncare poiché l'utente potrebbe aver digitato quel "pensiero davvero importante" e se troncassi lo perderebbero. Ho una convalida sul mio modello di business sottostante che mi dice quando l'input non è valido e modifico il mio TextBox
per mostrare l'invalidità.
Voglio anche Style
il testo. Posso farlo usando un TextBox
o devo andare in un RichTextBox
? Il mio valore sottostante è solo una stringa dritta.
Soluzione
Suppongo che tu stia utilizzando il meccanismo di convalida WPF stock - ValidationRules
. In tal caso, è necessario definire un Trigger
su Validation.HasError == true
e impostare le proprietà TextBox
secondo necessità. Ad esempio, quanto segue evidenzierà il testo in rosso se non è valido.
<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>
Altri suggerimenti
Questa è una specie di risposta folle e non l'ho ancora provata, ma se funziona, si sarebbe in grado di continuare a utilizzare una casella di testo anziché una ricca casella di testo.
Che cosa succede se si utilizza un pennello sfumato per disegnare il testo (o se non il testo, lo sfondo della casella di testo, se questo è accettabile per te).
Costruiresti il ??gradiente in modo che fosse bianco fino al punto in cui l'input è diventato troppo lungo e dopo il rosso. Ovviamente fino a quando il testo non è diventato troppo lungo il pennello sarebbe tutto bianco.
Ciò comporterebbe la misurazione del testo per ottenere la definizione gradiente corretta (poiché i caratteri proporzionali farebbero sì che l'area valida abbia dimensioni diverse a seconda delle lettere inserite) e richiederebbe che il pennello fosse calcolato e assegnato a ciascun carattere inserito.