代码之家  ›  专栏  ›  技术社区  ›  Aran Mulholland JohnnyAce

在wpf文本框中,我可以使超过某个长度的字符串中的字符变为红色吗?

  •  3
  • Aran Mulholland JohnnyAce  · 技术社区  · 16 年前

    我用的是 TextBox 控制并希望字符在一定数量的字符后变为红色,以向用户显示他们键入的字符太多。我不想截短,因为用户可能键入了“非常重要的想法”,如果我截短了,他们会丢失它。我对我的基础业务模型进行了验证,它告诉我输入何时无效,以及我的样式 文本框 显示无效。

    我想 Style 文本也是。我能用一个 文本框 或者我需要去 RichTextBox ?我的基本值只是一个直字符串。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Pavel Minaev    16 年前

    我假设你使用的是股票WPF验证机制- ValidationRules . 如果是这样,您应该定义 Trigger Validation.HasError == true 并设置 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>
    
        2
  •  1
  •   automatic    16 年前

    这是一个疯狂的答案,我还没有尝试过,但是如果它有效的话,你可以继续使用文本框而不是富文本框。

    如果您使用渐变画笔来绘制文本(或者如果不是文本,则是文本框背景,如果您可以接受的话)。

    您将构建渐变,使其变白到输入太长的点,并在病房后变红。当然,在文本变长之前,画笔都是白色的。

    这将涉及文本测量,以获得正确的渐变定义(因为比例字体会导致有效区域的大小根据输入的字母而不同)和 需要在输入的每个字符处计算和分配画笔。