2010-11-26 36 views
0

值这个项目是在C#.NET下4.动画控制的旋转结合自定义对象

我有每隔一段时间变化值自定义对象。一个UI控件应该反映最新的状态 - 所以我试图使用绑定,但我不能把它连接起来。

我希望控件注意对象的值何时改变(绑定?),然后动画(Storyboard?)到新值超过1/2秒左右。它是特定于方向的,所以如果旧值是340degrees,而新值是15度,那么我不希望它围绕“长途”旋转,所以在某处需要一些逻辑。

理想的情况下,这个动画的所有细节应该在UI(xaml)中 - 我的更新对象不想知道UI细节。 Blend4中的工具似乎并不适合这项工作,并且我在xaml中的黑客行为无处不在,非常缓慢......

我应该有另一个对象来侦听对源对象的更改,然后配置动画每次?它应该全部在xaml中吗? '真实'的代码?

有没有人知道采取正确的方法,在这里?或者可以指向某人发布了一些相似的东西?我已经坚持了两天,现在!

回答

0

来回相对于动画的责任后,怕设计师堆砌起来的代码混合,实际上得到它的工作,我(临时)到达了各种各样的解决方案...

这就是所谓的MainWindow.xaml.cs在启动时:

private void initialiseCustomAnimations() 
{ 

    compassRoseAnimation = new DoubleAnimation(); 
    compassRoseAnimation.Duration = new Duration(TimeSpan.FromSeconds(2)); 
    navigationData.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(navigationData_PropertyChanged); 

} 

,这是胆量(其中CompassWithNumbersControl是建立在混合画布):

private void navigationData_PropertyChanged(object sender, EventArgs e) 
{ 
    compassRoseAnimation.From = navigationData.previousHeading; 
    compassRoseAnimation.To = navigationData.heading; 
    RotateTransform rotateTransform = new RotateTransform(); 
    CompassWithNumbersControl.RenderTransform = rotateTransform; 
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, compassRoseAnimation); 
} 

我应该只对正确的事件进行这个动画被解雇,但它的工作原理..