1

我的风格在 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; }
}

但它不起作用!有小费吗?

4

1 回答 1

3

我认为这里有几个问题。

首先是您没有为 ButtonStyle 提出属性更改通知。将 ButtonStyle 更改为依赖属性,或在 MyCustomButton 上实现 INotifyPropertyChanged,并从 ButtonStyle 设置器引发 PropertyChanged 事件。在这种情况下,依赖属性方法可能会更好,因为在某些时候有人会想要通过 Style 设置 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.SettersorDataTrigger.Setters元素。XAML 阅读器将为您填写。)

于 2010-03-12T19:57:32.947 回答