在 DependencyObject 上使用 DependencyProperty.AddOwner 方法而不是简单的

本文关键字:简单 方法 AddOwner DependencyObject DependencyProperty | 更新日期: 2023-09-27 18:35:15

有人可以解释一下,在WPF中使用AddOwner方法有什么好处(依赖属性)?我有一些误解。

对于实例,请查看下面的代码。

public class TestVisual: Shape
{
    private LineGeometry line = new LineGeometry();
    public static readonly DependencyProperty XY1Property =
        LineGeometry.StartPointProperty.AddOwner(
            typeof(TestVisual),
            new FrameworkPropertyMetadata(new Point(0,0),
                FrameworkPropertyMetadataOptions.AffectsMeasure));
    public static readonly DependencyProperty XY2Property =
        LineGeometry.EndPointProperty.AddOwner(
            typeof(TestVisual),
            new FrameworkPropertyMetadata(new Point(0, 0),
                FrameworkPropertyMetadataOptions.AffectsMeasure));

    public Point XY1
    {
        get { return (Point)GetValue(XY1Property);}
        set { SetValue(XY1Property,value); }
    }
    public Point XY2
    {
        get { return (Point)GetValue(XY2Property); }
        set { SetValue(XY2Property, value); }
    }

    protected override Geometry DefiningGeometry
    {
        get
        {
            line.StartPoint = XY1 ;
            line.EndPoint = XY2;                         
            return line;
        }
    }
}

从上面的代码中,您可以看到TestVisual类使用AddOwner方法作为依赖项属性。好的,但是相同的结果我们可以变得更容易(我的意思是我们可以得到一个类,允许通过设置 XY1 和 XY2 点来调整线条视觉元素):

    public class TestVisual: Shape
{
    private LineGeometry line = new LineGeometry();
    public Point XY1
    {
        get;
        set;
    }
    public Point XY2
    {
        get;
        set;
    }

    protected override Geometry DefiningGeometry
    {
        get
        {
            line.StartPoint = XY1 ;
            line.EndPoint = XY2;                         
            return line;
        }
    }
}

那么重点是什么呢?提前谢谢。

在 DependencyObject 上使用 DependencyProperty.AddOwner 方法而不是简单的

关键是XY1XY2在第一个版本中是依赖项属性,在第二个版本中是简单的 .NET 属性。请参阅为什么选择依赖项属性?

通常,AddOwner用于使依赖项属性在最终不是从拥有依赖项属性的类型派生的类型上可用。