代码之家  ›  专栏  ›  技术社区  ›  DefenestrationDay Tom Jefferys

将控件的旋转设置为绑定到自定义对象的值的动画

  •  0
  • DefenestrationDay Tom Jefferys  · 技术社区  · 15 年前

    此项目位于.net 4下的c中。

    我有一个自定义对象,它经常更改值。一个UI控件应该反映最新的状态-所以我试图使用绑定,但我无法将其连接起来。

    我希望控件注意到对象的值何时更改(绑定?),然后设置动画(情节提要?)新值超过1/2秒左右。它是特定于方向的,所以如果旧值是340度,而新值是15度,我不希望它绕着“长距离”旋转,所以需要一些动画逻辑。

    理想的, 全部的 这个动画细节应该在UI(xaml)中——我更新的对象不想知道UI细节。Blend4中的工具似乎不适合这项工作,而且我在xaml中的工作进展非常缓慢。。。

    我是否应该有另一个对象来监听对源对象的更改,然后每次都配置动画?应该都用xaml吗真的密码?

    这里有人知道正确的方法吗?或者可以指出有人写过类似的博客?我已经做了两天了,现在!

    1 回复  |  直到 15 年前
        1
  •  0
  •   DefenestrationDay Tom Jefferys    15 年前

    在反复讨论动画的责任,担心设计师把代码塞进blend中,并真正让它工作之后,我(暂时)找到了一种解决方案。。。

    启动时在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);
    }
    

    我应该只在正确的事件被触发时执行这个动画,但它是有效的。。