Different selection colors for different DataGrid rows

438 Views Asked by At

I'm trying to set different colors to different rows in datagrid, based on Type of the row and whether it is selected:

<Style TargetType="DataGridCell" x:Key="ActiveCellStyle">
    <Setter Property="Foreground" Value="Black"/>
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Type}" Value="0"/>
                 <Condition Property="IsSelected" Value="False"/>
            </MultiDataTrigger.Conditions>      
            <Setter Property="Background" Value="#FFDFE6ED"/>
        </MultiDataTrigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Type}" Value="0"/>
                 <Condition Property="IsSelected" Value="True"/>
            </MultiDataTrigger.Conditions>      
            <Setter Property="Background" Value="#FF6CAFF1"/>
        </MultiDataTrigger>
        ...
    </Style.Triggers>
</Style>

When I run this, I'm getting ArgumentException: key cannot be null.

How can I fix this?

1

There are 1 best solutions below

0
On BEST ANSWER

With MultiTrigger you use Property and with MultiDataTrigger you use Binding, you can't combine them. So change

<Condition Property="IsSelected"

to

<Condition Binding="{Binding RelativeSource={RelativeSource Self},
                             Path=IsSelected}"

and it should work

<Style TargetType="DataGridCell" x:Key="ActiveCellStyle">
    <Setter Property="Foreground" Value="Black"/>
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Type}" Value="0"/>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self},
                                                 Path=IsSelected}"
                                       Value="False"/>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="#FFDFE6ED"/>
            </MultiDataTrigger>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Type}" Value="0"/>
                <Condition Binding="{Binding RelativeSource={RelativeSource Self},
                                             Path=IsSelected}"
                           Value="True"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Background" Value="#FF6CAFF1"/>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>