DataTrigger для цвета фона DataGridRow - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь привязать триггер DataGridRow, чтобы установить красный фон, если мой элемент критичен. В противном случае я хочу AlternatingRowBackground. Вот что у меня пока так:

<ControlTemplate.Triggers>
  <DataTrigger Binding="{Binding IsCritical}" Value="True">
    <Setter Property="Background" Value="Red" />
  </DataTrigger>
</ControlTemplate.Triggers>

Работает нормально, но отключает AlternatingRowBackground (где-то читал, что это нормально). Поэтому я хочу сделать это вручную и сам установить фон строки следующим образом:

<Style.Triggers>
  <Trigger Property="AlternationIndex" Value="0">
    <Setter Property="Background" Value="White" />
  </Trigger>
  <Trigger Property="AlternationIndex" Value="1">
    <Setter Property="Background" Value="WhiteSmoke" />
  </Trigger>
</Style.Triggers>

Но при этом он никогда не станет красным (Триггер критического связывания). Я попытался MultiDataTrigger и оба условия (IsCritical -> False && Alternate), но привязка не удалась. Я также попытался поместить оба триггера в Style и ControlTemplate, все еще не работает.

Есть идеи?

1 Ответ

2 голосов
/ 23 марта 2011

Триггеры стиля имеют более высокий приоритет, чем триггеры ControlTemplate, как обсуждено здесь .

Что вы можете сделать, это "нацелить" элемент, который использует кисть фона, и установить его напрямую,Таким образом, у вас, вероятно, есть что-то вроде следующего в вашем ControlTemplate:

<Border Background="{TemplateBinding Background}" ... >

Вы можете изменить это на:

<Border x:Name="border" Background="{TemplateBinding Background}" ... >

Затем измените ваш ControlTemplate DataTrigger на:

<ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding IsCritical}" Value="True">
        <Setter TargetName="border" Property="Background" Value="Red" />
    </DataTrigger>
</ControlTemplate.Triggers>

Это перемещает приоритет установщика триггера ControlTemplate вверх по сравнению с триггерами стиля.

...