在一个wpf TextBox中,我可以使超过一定长度的字符串中的字符变为红色吗?
-
05-07-2019 - |
题
我正在使用 TextBox
控件,并希望字符在一定数量的字符后变为红色,以向用户显示他们输入的内容过多。我不想截断,因为用户可能已经键入了“非常重要的想法”。如果我被截断他们会失去它。我对我的基础业务模型进行了验证,告诉我输入何时无效,并设置我的 TextBox
以显示无效。
我也希望 Style
文本。我可以使用 TextBox
执行此操作,还是需要转到 RichTextBox
?我的潜在价值只是一个直线。
解决方案
我假设你正在使用股票WPF验证机制 - ValidationRules
。如果是这样,您应该在 Validation.HasError == true
上定义 Trigger
,并根据需要设置 TextBox
属性。例如,如果文本无效,则以下内容将突出显示带有红色的文本。
<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>
其他提示
这是一种疯狂的答案,我还没有尝试过,但如果它有效,你就可以继续使用文本框而不是富文本框。
如果您使用渐变画笔绘制文本(如果不是文本,文本框背景,如果您可以接受),该怎么办?
你会构建渐变,使得它是白色的,直到输入太长并且后面是红色。当然,直到文本太长,画笔才会全白。
这将涉及文本测量以获得正确的渐变定义(因为比例字体会导致有效区域的大小不同,具体取决于输入的字母)和 需要在输入的每个字符上计算和分配画笔。
不隶属于 StackOverflow