DataGridRow MultiDataTrigger for Background: условие IsSelected не работает - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть сетка данных, привязанная к коллекции. Я применил следующий стиль строки к сетке данных:

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Status}" Value="Down">
                <Setter Property="Background" Value="Red" />
                <Setter Property="Foreground" Value="White" />
            </DataTrigger>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Status}" Value="Down" />
                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsSelected}" Value="True" />
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Green" />
                <Setter Property="Foreground" Value="White" />
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

Источник данных работает, но не мультидатчик. Неудачное условие - это то, что проверяет наличие IsSelected в сетке данных, являющейся истинным. Если я изменю его так, чтобы он использовал конвертер значений, который всегда возвращает true, я буду видеть строки зеленым цветом.

По сути, я хочу, чтобы строки, чьи объекты данных имели свойство status, установленное на down, были красного цвета, но когда я выбираю эти строки, они должны быть зелеными (или фактически затемненными) вместо синего по умолчанию.

Ответы [ 2 ]

5 голосов
/ 23 апреля 2011

Ваш переплет вполне возможен.Но DataGrid использует SystemColors.HighlightBrush и SystemColors.HighlightTextBrush для выделения выбранных строк.Чтобы изменить цвет выбранной строки, вы можете просто переопределить кисть для вашей DataGrid следующим образом:

    <DataGrid.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
    </DataGrid.Resources>

Таким образом, вы сможете увидеть цвет фона, установленный вашим триггером.

Надеюсь, это поможет!

0 голосов
/ 22 сентября 2015

Вам нужно изменить DataGrid.CellStyle, а не DataGrid.RowStyle.Последний предназначен только для невыбранных строк.

...