我在我的风格中有这样的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; }
}但是它不起作用!有什么建议吗?
发布于 2010-03-13 03:57:33
我认为这里有几个问题。
第一个问题是您没有为ButtonStyle引发属性更改通知。将ButtonStyle更改为依赖属性,或者在MyCustomButton上实现INotifyPropertyChanged,然后从ButtonStyle设置器引发PropertyChanged事件。在这种情况下,依赖属性方法可能更好,因为在某些情况下,有人想要通过样式设置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.Setters或DataTrigger.Setters元素。XAML阅读器将为您填写此信息。)
https://stackoverflow.com/questions/2433990
复制相似问题