【问题标题】:animating the rotation of a control to value of binding to custom object将控件的旋转动画化为绑定到自定义对象的值
【发布时间】:2010-11-26 05:32:29
【问题描述】:

这个项目在.net 4下的c#中。

我有一个经常改变值的自定义对象。 UI 控件应反映最新状态 - 所以我尝试使用绑定,但无法连接。

我希望控件在对象的值更改(绑定?)时注意到,然后在 1/2 秒左右的时间内将动画(故事板?)设置为新值。它是特定于方向的,所以如果旧值是 340 度,而新值是 15 度,我不希望它绕“长路”旋转,所以在某处需要一些动画逻辑。

理想情况下,此动画细节的所有都应该在 UI (xaml) 中 - 我更新的对象不想知道 UI 细节。 Blend4 中的工具似乎无法胜任这项工作,而且我在 xaml 中的修改进展非常缓慢......

我是否应该有另一个对象来监听源对象的更改,然后每次都配置动画?应该全部在 xaml 中吗? “真实”代码?

这里有人知道正确的方法吗?或者可以指出有人在博客上写了一些非常相似的东西?我已经用了两天了,现在!

【问题讨论】:

    标签: c# .net wpf animation binding


    【解决方案1】:

    在反复讨论动画的责任、担心设计师在混合中塞满代码并真正让它工作之后,我(暂时)找到了某种解决方案...

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

    我应该只在正确的事件被触发时执行此动画,但它可以工作..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多