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

StackOverflow https://stackoverflow.com/questions/1204412

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top