Единый стиль TextBox, чтобы отображать отрицательные числа красным цветом для всех из них

На первый взгляд задача похожа на Отрицательный номер текстового блока WPF, выделенный красным цветом

В моем случае я должен отображать ItemsControl коллекцию очков. Каждая точка имеет несколько свойств типа NumericValue, которые в конечном итоге являются оболочкой для Nullable<double>.

public class Point
{
    NumericValue Proposal { get; set; }
    NumericValue Accepted { get; set; }
    NumericValue Approved { get; set; }
    ... etc.
}

Я отображаю все эти свойства Point как текстовые поля. Класс NumericValue имеет свойство IsNegative, и я хочу, чтобы передний план соответствующего текстового поля был красным, если IsNegative = True.

Однако я бы предпочел не определять это правило в стиле для каждого отдельного TextBox, а создать единый стиль с DataTrigger, привязанным к IsNegative.

Упрощенный XAML выглядит так, как показано ниже.

<ItemsControl ItemsSource="{Binding Path=Points}">
...
    <TextBox Text="{Binding Path=Data.Proposal.Value}" ... />
    <TextBox Text="{Binding Path=Data.Accepted.Value}" ... />
...
</ItemsControl>

Пожалуйста, помогите мне с определением привязки для DataTrigger этого единственного стиля.


person Ivan Gerken    schedule 15.05.2012    source источник
comment
›Пожалуйста, помогите мне с определением привязки для DataTrigger этого единственного стиля. Binding = {Binding IsNegative}   -  person H.B.    schedule 15.05.2012
comment
Похоже, не работает. Я попробовал это с исходной привязкой текстового поля, а затем попробовал также ‹TextBox Text = {Binding Path = Data.Proposal} ... /›, что мне кажется более логичным в отношении {Binding IsNegative}. В любом случае свойство IsNegative даже не вызывается.   -  person Ivan Gerken    schedule 15.05.2012
comment
Безусловные установщики стиля работают нормально.   -  person Ivan Gerken    schedule 15.05.2012
comment
Если DataContext не является самой точкой, которую вы, кажется, указываете здесь, вам необходимо изменить привязку, если это свойство Data является точкой, привязка будет {Binding Data.IsNegative} (что здесь эквивалентно {Binding Path=Data.IsNegative}). Если привязка ничего не делает, попробуйте отладить.   -  person H.B.    schedule 15.05.2012


Ответы (2)


Используйте конвертер, указанный на WPF TextBlock Negative number в красном цвете, как это

 <ItemsControl ItemsSource="{Binding Path=Points}">
        ...
        <TextBox Text="{Binding Path=Data.Proposal.Value}" Foreground="{Binding Data.Proposal.IsNegative, Converter={StaticResource valueToBackground}}" />
        ...
    </ItemsControl>
person Bilal Hashmi    schedule 15.05.2012
comment
Спасибо за предложение. Я бы предпочел сохранить всю раскраску в XAML, поэтому я буду использовать этот метод только в крайнем случае. - person Ivan Gerken; 15.05.2012

Вы можете следовать Как: условное форматирование с использованием XAML в WPF. Я думаю, это будет вам полезно.

person Bilal Hashmi    schedule 15.05.2012