Arsen Zahray
Arsen Zahray

Reputation: 25297

Different selection colors for different DataGrid rows

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?

Upvotes: 2

Views: 423

Answers (1)

Fredrik Hedblad
Fredrik Hedblad

Reputation: 84656

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>

Upvotes: 1

Related Questions