Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
WPF:CLR属性到依赖项属性_Wpf_Animation_Dependency Properties - Fatal编程技术网

WPF:CLR属性到依赖项属性

WPF:CLR属性到依赖项属性,wpf,animation,dependency-properties,Wpf,Animation,Dependency Properties,我有一个属性为的用户控件 public double X { get { return Canvas.GetLeft(this) + this.Radius; } set { Canvas.SetLeft(this, value - this.Radius); PropertyChanged(this, new PropertyChang

我有一个属性为的用户控件

public double X
    {
        get
        {
            return Canvas.GetLeft(this) + this.Radius;
        }
        set
        {
            Canvas.SetLeft(this, value - this.Radius);
            PropertyChanged(this, new PropertyChangedEventArgs("X"));
        }
    }

我想使用与此属性相关的动画,但动画只需要依赖属性。如何解决此问题?

好吧,此属性所做的一切就是从
Canvas.Left
派生其值。为什么不直接为画布设置动画呢?

看起来您希望“X”成为对象(椭圆)的中心

我可以建议两件事:

  • 创建一个新的dependency项目,并将setter代码放入新属性的OnPropertyChanged回调中。(这可能是最好的)

  • 将RenderTransform设置为元素,该元素是具有-Radius的TranslateTransform,然后设置Canvas.Left将类似于设置其中心


  • 如果在OnPropertyChanged中将X设置为50,半径为10,则最终将Canvas.Left设置为40。getter将返回正确的50,无需更改。如果半径改变,只需更新X=Canvas.Left+radius,我不知道{return Canvas.GetLeft(this)+this.radius;}逻辑在哪里。