Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DependencyObject上使用DependencyProperty.AddOwner方法而不是简单的POCO属性getter/setter的原因是什么?_C#_Wpf_Dependency Properties - Fatal编程技术网

C# 在DependencyObject上使用DependencyProperty.AddOwner方法而不是简单的POCO属性getter/setter的原因是什么?

C# 在DependencyObject上使用DependencyProperty.AddOwner方法而不是简单的POCO属性getter/setter的原因是什么?,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,有人能解释一下,在WPF(依赖属性)中使用AddOwner方法有什么好处吗?我有些误解 例如,请看下面的代码 public class TestVisual: Shape { private LineGeometry line = new LineGeometry(); public static readonly DependencyProperty XY1Property = LineGeometry.StartPointProperty.AddOwner(

有人能解释一下,在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;
        }
    }
}
从上面的代码可以看出,TestVisualClass使用AddOwner方法作为依赖项属性。好的,但是同样的结果,我们可以变得更容易(我的意思是我们可以得到一个类,它允许通过设置XY1和XY2点来调整线条视觉元素):


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

重点是
XY1
XY2
在第一个版本中是依赖属性,在第二个版本中是简单的.NET属性。看


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

感谢您的澄清和提供的链接。好的,通常我理解AddOwner的意思,但在某些情况下,我可以用委托或反射来代替它。在我看来,AddOwner只是保存内存资源,将属性变量保存在存储器中。也许有人能给我提供一个展示AddOwner优势的样本吗?
    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;
        }
    }
}