Как я могу переопределить связанное свойство с DataTrigger - PullRequest
8 голосов
/ 07 мая 2009

У меня есть следующий XAML, используемый для отображения подробной информации об элементе, выбранном в виде списка. Я хочу, чтобы прямоугольник отображал стандартный информационный цвет за текстом, кроме случаев, когда выбранный элемент представляет сообщение об ошибке. Код ниже не работает как есть и всегда показывает информацию цвета. Это прекрасно работает, если я не укажу Fill для корневого <Rectangle /> элемента.

<Rectangle Fill="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" 
           RadiusX="4" RadiusY="4">
  <Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                     Value="Error" >
          <Setter Property="Fill" Value="#20FF0000" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Rectangle.Style>
</Rectangle>

Фрагмент не отражает его, но реальный код имеет довольно много возможных уровней статуса для серьезности, поэтому я не хочу определять триггер для каждой возможной серьезности. Логика, которую я хочу, это «использовать информационный цвет, если серьезность не является ошибкой, а затем использовать красный».

Я уверен, что неправильно понял какой-то фундаментальный аспект WPF, но, похоже, не могу его точно определить. Может ли кто-нибудь указать мне правильное направление, чтобы указанные мной триггеры данных переопределяли существующее значение Fill, когда их условия выполняются?

1 Ответ

10 голосов
/ 07 мая 2009

Ты почти у цели. Вместо указания заливки «по умолчанию» в качестве атрибута прямоугольника укажите его в стиле:

<Rectangle RadiusX="4" RadiusY="4">
  <Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
      <Setter Property="Fill" 
              Value="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=CurrentMessage.Severity"  
                     Value="Error" >
          <Setter Property="Fill" Value="#20FF0000" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Rectangle.Style>
</Rectangle>
...