2009-12-16 3 views
2

У меня есть текстовое поле в элементе listview itemtemplate. Я хочу изменить цвет фона текстового поля на красный, когда длина превышает 75 символов, и мне нужно, чтобы цвет фона обновлялся по мере того, как пользователь вводит. Каков наилучший способ достичь этого в WPF?WPF Текстовое поле Цвет фона на основе длины текста

ответ

8

Я считаю, что что-то подобное будет работать. Это потребует от вас написать собственный конвертер цвет фона.

<TextBox 
    Background="{Binding RelativeSource={RelativeSource self}, 
     Path=Text, 
     UpdateSourceTrigger=PropertyChanged, 
     Converter={StaticResource backgroundColorConverter}}" 
    ... 
/> 

Другой вариант - использовать DataTrigger, как показано ниже. Это также потребует конвертер, чтобы проверить, если длина строки была более 75.

<TextBox> 
    .... 
    <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Background" Value="YourDefaultColor" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=YourTextBox, Path=Text, Converter={StaticResource textLengthColorConverter}}" Value="True"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
+0

первые один срабатывает только после того, как текстовое поле теряет фокус. Я получаю «Значение типа« DataTrigger »не может быть добавлено в набор или словарь типа SetterBaseCollection на втором. – dhysong

+0

Используйте UpdateSourceTrigger = PropertyChanged для первого. По умолчанию используется LostFocus для TextBox. Мне нужно будет см. ваш код, чтобы помочь со 2-й ошибкой. –

+0

Спасибо большое, что сработало! – dhysong

0

Вы можете использовать «Run» тега в текстовом блоке, который применяется фон в зависимости от длины текста