你打算如何声明一个依赖属性

本文关键字:一个 属性 依赖 何声明 声明 | 更新日期: 2023-09-27 18:19:00

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

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));

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

你打算如何声明一个依赖属性

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

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