В текстовом поле wpf я могу сделать символы в строке, которые превышают определенную длину, становятся красными? - PullRequest
3 голосов
/ 30 июля 2009

Я использую элемент управления TextBox и хочу, чтобы символы становились красными после определенного количества символов, чтобы показать пользователям, что они набрали слишком много. Я не хочу усекать, поскольку пользователь мог набрать эту «действительно важную мысль», и если бы я усек, они потеряли бы ее. У меня есть проверка моей базовой бизнес-модели, которая сообщает мне, когда ввод неверен, и я ввожу свой TextBox, чтобы показать недействительность.

Я тоже хочу Style текст. Могу ли я сделать это, используя TextBox, или мне нужно перейти на RichTextBox? Мое базовое значение - просто прямая строка.

Ответы [ 2 ]

1 голос
/ 31 июля 2009

Это своего рода сумасшедший ответ, и я еще не пробовал его, но если он сработает, вы сможете продолжать использовать текстовое поле вместо расширенного текстового поля.

Что делать, если вы используете кисть градиента для рисования текста (или, если не текста, фона текстового поля, если это было приемлемо для вас).

Вы бы построили градиент таким образом, чтобы он был белым до того момента, пока вход не стал слишком длинным, а красный после него. Конечно, пока текст не станет слишком длинным, кисть будет полностью белой.

Это будет связано с измерением текста, чтобы получить правильное определение градиента (поскольку пропорциональные шрифты приводят к тому, что действительная область будет иметь другой размер в зависимости от введенных букв), и потребует, чтобы кисть была рассчитана и назначена для каждого введенного символа.

0 голосов
/ 30 июля 2009

Полагаю, вы используете стандартный механизм проверки 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>
...