DataGridRow MultiDataTrigger for Background:IsSelected条件不起作用

时间:2011-04-23 10:53:14

标签: wpf datagrid triggers background datatrigger

我有一个绑定到集合的数据网格。我已将以下rowstyle应用于datagrid:

<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>

数据触发器正在工作,但不是多数据触发器。失败的条件是检查datagridrow上的IsSelected为true的条件。如果我改变它所以它使用一个总是返回true的valueconverter,我会看到行为绿色。

基本上我希望数据对象将status属性设置为down的行为红色,但是当我选择那些行时,它们需要是绿色(或实际上是黑色的)而不是默认的蓝色。

2 个答案:

答案 0 :(得分:5)

你的装订很合适。但DataGrid使用SystemColors.HighlightBrush和SystemColors.HighlightTextBrush来突出显示所选行。要更改所选行的颜色,您可以覆盖DataGrid的画笔,如下所示:

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

这样您就可以看到触发器设置的背景颜色。

希望这有帮助!

答案 1 :(得分:0)

您需要修改DataGrid.CellStyle,而不是DataGrid.RowStyle。最后一个是仅用于未选择的行。