我在桌面上制作移动窗口的动画。我找到了一些信息,其中最好的方法是创建自己的属性并分别为Left和Top设置动画。
问题是这个属性是用值(0,0)初始化的。我希望我的属性从窗口的顶部和左侧获取值,并设置它。
我的财产:
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);
}
}
答案 0 :(得分:1)
结帐MultiBinding和IMultiValueConverter。这将允许您绑定到两个源属性并将它们转换为您的位置的单个值。
编辑:听起来你真正想要做的就是动画一个Point而不是分离Left和Top值,所以这可能不适用于你的情况。这里真正的问题是你有双向问题;此属性表示与Top和Left相同的信息,因此如果您更改它,则Top和Left应该更改。同样,由于Top和Left是可变的,如果这些变化,你真的希望你的财产能够反映出来。
一个选项是为LeftProperty和TopProperty注册属性更改处理程序。现在,当这些更改时,请更新您的PositionProperty。你必须要小心,不要触发重复更新(我改变左,改变位置,改变左,这......)
答案 1 :(得分:1)
我真的不明白你想要达到的目的但是......这是我对你的问题的看法:
所以基本上,你需要的是在拥有它时(例如在窗口的“show()”方法中)设置你的属性的值,如下所示:
myMainCard.SetCurrentValue(MainCard.PositionProperty,new Point(){X = myWindow.Left,Y = myWindow.Top});