3

我正在阅读有关如何制作参数化样式的教程(此处)。在其中,它使用了一些依赖属性。它这样声明它们:

public static Brush GetTickBrush(DependencyObject obj)
{
    return (Brush)obj.GetValue(TickBrushProperty);
}
public static void SetTickBrush(DependencyObject obj, Brush value)
{
    obj.SetValue(TickBrushProperty, value);
}
public static readonly DependencyProperty TickBrushProperty =
    DependencyProperty.RegisterAttached(
        "TickBrush",
        typeof(Brush),
        typeof(ThemeProperties),
        new FrameworkPropertyMetadata(Brushes.Black));

现在,因为我喜欢片段,所以我继续寻找一个,看看我是否不必制作一个。有一个,但风格完全不同:

public int MyProperty
{
    get { return (int)GetValue(MyPropertyProperty); }
    set { SetValue(MyPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty = 
    DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));

现在,我不明白的是:这两者有什么区别?为什么一个需要 aDependencyObject来获得价值,而另一个不需要?您是否在不同的场景中使用它们?

4

1 回答 1

4

您展示的第一个示例是附加属性,它是一种特殊的依赖属性。附加属性的值可以“附加”到其他对象,而通常的依赖属性属于它们各自类的实例。

第二个代码片段显示了一个常规的依赖属性,如果您只想将一个额外的依赖属性添加到您正在创建的自定义类中,这是一种方法。

于 2013-06-18T19:33:04.957 回答