C# 如何创建从其他两个属性获取值的依赖性属性
我正在制作桌面上移动窗口的动画。我在某个地方发现,最好的方法是创建自己的属性并设置它的动画,而不是将其左上方分开 问题在于此属性是用值(0,0)初始化的。我希望我的属性从窗口的顶部和左侧获取值,并进行设置 我的财产:C# 如何创建从其他两个属性获取值的依赖性属性,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我正在制作桌面上移动窗口的动画。我在某个地方发现,最好的方法是创建自己的属性并设置它的动画,而不是将其左上方分开 问题在于此属性是用值(0,0)初始化的。我希望我的属性从窗口的顶部和左侧获取值,并进行设置 我的财产: public static readonly DependencyProperty PositionProperty = DependencyProperty.Register("Position", typeof(Point), typeof(MainCard),
public static readonly DependencyProperty PositionProperty = DependencyProperty.Register("Position", typeof(Point), typeof(MainCard),
new PropertyMetadata(PositionPropertyChanged) );
private static void PositionPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs prop)
{
MainCard mw = (MainCard)dependencyObject;
Point value = (Point)prop.NewValue;
mw.Top = value.Y;
mw.Left = value.X;
}
public Point Position
{
get
{
return (Point)GetValue(PositionProperty);
}
set
{
SetValue(PositionProperty, value);
}
}
退房并离开。这将允许您绑定到两个源属性,并将它们转换为位置的单个值
编辑:听起来你真正想做的是设置一个点的动画,而不是分开左值和顶值,所以这可能不适用于你的情况。这里真正的问题是你有一个双向的问题;此属性表示与“顶部”和“左侧”相同的信息,因此如果您更改它,则“顶部”和“左侧”应该会更改。同样,由于Top和Left是可变的,如果它们发生了变化,您真的希望您的属性反映出这一点
一个选项是为LeftProperty和TopProperty注册属性更改处理程序。现在,当这些更改时,更新您的PositionProperty。在这里,您必须小心不要触发重复更新(我改变了左侧,改变了位置,改变了左侧,改变了…)我真的不明白您想要实现什么,但是。。。以下是我对你的问题的看法:
- 首先,您不能将属性的“默认”值放在窗口的左上角,因为只有在运行时才知道它,而属性的“默认”值必须在编译时提供
- 因此,基本上,您需要设置您的产权的值(例如在窗口的“show()”方法中),如下所示: myMainCard.SetCurrentValue(MainCard.PositionProperty,new Point(){X=myWindow.Left,Y=myWindow.Top})