DataTrigger不起作用

时间:2010-03-12 16:08:39

标签: c# wpf datatrigger

我的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 个答案:

答案 0 :(得分:3)

我认为这里存在一些问题。

首先,您没有为ButtonStyle提出属性更改通知。将ButtonStyle更改为依赖项属性,或在MyCustomButton上实现INotifyPropertyChanged,并从ButtonStyle setter中引发PropertyChanged事件。在这种情况下,依赖属性方法可能更好,因为在某些时候某人想要通过Style设置ButtonStyle,并且只能设置DP样式。

第二个是你的数据触发器看起来正在查看数据上下文,这可能不是控件。 (如果查看“输出”窗口,您可能会看到有关无法在某些数据对象上找到“ButtonStyle”属性的绑定错误。)您可以通过向DataTrigger添加RelativeSource={RelativeSource Self}来解决此问题。但是,如果您按照建议将ButtonStyle更改为DP,您应该只能使用普通的旧触发器,它会自动对付正在设置样式的控件的属性:

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

(另请注意,您无需指定Trigger.SettersDataTrigger.Setters元素.XAML阅读器将为您填写该内容。)