DataTrigger не работает - PullRequest
       6

DataTrigger не работает

1 голос
/ 12 марта 2010

У меня есть это в XAML в моем стиле:

<DataTrigger Binding="{Binding Path=ButtonStyle}" Value="CutLeft">
  <DataTrigger.Setters>
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
    <Setter Property="CornerRadius" TargetName="border1" Value="0 10 10 0" />
  </DataTrigger.Setters>
</DataTrigger>

И этот XAML в моем окне, где у меня есть кнопка:

<gui:MyCustomButton ButtonStyle="CutLeft"/>

А в коде MyCustomButton:

public enum ButtonStyles {
    CutLeft, CutRight, Circular, Normal
}

public partial class MyCustomButton 
{
    [DefaultValue(ButtonStyles.Normal)]
    public ButtonStyles ButtonStyle { get; set; }
}

Но это не работает! Любые советы?

1 Ответ

3 голосов
/ 12 марта 2010

Я думаю, здесь есть пара проблем.

Во-первых, вы не поднимаете уведомления об изменении свойств для ButtonStyle. Либо измените ButtonStyle на свойство зависимости, либо внедрите INotifyPropertyChanged в MyCustomButton, и вызовите событие PropertyChanged из установщика ButtonStyle. В этом случае подход со свойством зависимости, вероятно, лучше, потому что в какой-то момент кто-то захочет установить ButtonStyle через стиль, и только DP могут быть стилизованы.

Во-вторых, ваш триггер данных выглядит как контекст данных, который, вероятно, не является элементом управления. (Если вы заглянете в окно «Вывод», вы, вероятно, увидите ошибки привязки из-за невозможности найти свойство «ButtonStyle» в каком-либо объекте данных.) Это можно обойти, добавив RelativeSource={RelativeSource Self} к вашему DataTrigger. Однако, если вы измените ButtonStyle на DP, как предложено, вы просто сможете использовать простой старый триггер, который автоматически работает со свойствами стилизованного элемента управления:

<Style.Triggers>
  <Trigger Property="ButtonStyle" Value="CutLeft">
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
  </Trigger>
</Style.Triggers>

(Обратите внимание, что вам не нужно указывать элемент Trigger.Setters или DataTrigger.Setters. Читатель XAML заменит его для вас.)

...