我的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; }
}
但它不起作用!有什么提示吗?
答案 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.Setters
或DataTrigger.Setters
元素.XAML阅读器将为您填写该内容。)