Триггер WPF, когда свойство и значение данных имеют значение true - PullRequest
5 голосов
/ 27 мая 2010

Мне нужно иметь возможность изменить Style элемента управления, когда свойство и значение данных имеют значение true. Например, мои связанные данные имеют свойство IsDirty. Я хотел бы изменить цвет фона моего элемента управления, когда значение IsDirty равно И элемент управления выбран. Я нашел классы MultiTrigger и MultiDataTrigger ... но в этом случае мне нужно каким-то образом вызывать данные и свойства. Как я могу это сделать?

Еще одно замечание: мне нужно сделать это в коде, а не в XAML.

Ответы [ 2 ]

11 голосов
/ 27 мая 2010

MultiDataTrigger работает так же хорошо для DependencyProperties, как и для обычных свойств. Просто установите путь в привязке к имени вашего свойства зависимости.

Вы должны быть осторожны при настройке источника этой привязки, поскольку по умолчанию источником является DataContext элемента, к которому подключен триггер. Если триггер используется в стиле на выбираемом объекте, вы можете использовать свойство RelativeSource объекта Binding:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding Path=IsDirty}" Value="True" />
      <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="Cyan" />
  </MultiDataTrigger>
0 голосов
/ 27 мая 2010

Вот как я на самом деле сделал это в коде:

new MultiDataTrigger
{
    Conditions = 
    {
        new Condition
        {
            Binding = new Binding("IsDirty"),
            Value = true
        },
        new Condition
        {                                                    
            Binding = new Binding("IsSelected") { RelativeSource = RelativeSource.Self },
            Value = true
        }
    },

    Setters =
    {
        new Setter
        {
            Property = Control.BackgroundProperty,
            Value = Brushes.Pink
        }
    }
}
...