У меня есть текстовое поле в элементе listview itemtemplate. Я хочу изменить цвет фона текстового поля на красный, когда длина превышает 75 символов, и мне нужно, чтобы цвет фона обновлялся по мере того, как пользователь вводит. Каков наилучший способ достичь этого в WPF?WPF Текстовое поле Цвет фона на основе длины текста
2
A
ответ
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
Вы можете использовать «Run» тега в текстовом блоке, который применяется фон в зависимости от длины текста
первые один срабатывает только после того, как текстовое поле теряет фокус. Я получаю «Значение типа« DataTrigger »не может быть добавлено в набор или словарь типа SetterBaseCollection на втором. – dhysong
Используйте UpdateSourceTrigger = PropertyChanged для первого. По умолчанию используется LostFocus для TextBox. Мне нужно будет см. ваш код, чтобы помочь со 2-й ошибкой. –
Спасибо большое, что сработало! – dhysong