2010-07-30 24 views
3

所以我有一个衡量标准,我已经制定了顺时针或逆时针方向的动画。每隔一段时间,新的数据就会发布到我设置的两个依赖项属性中。当这些属性中的数据发生变化时,我想对两个值进行一些计算,以确定量规针的旋转方向(以及量)。在依赖属性中的静态与非静态的东西麻烦......我应该甚至使用DP?

我已经得到了旋转代码的工作,我写了一个函数(全部用C#),它取得旋转的起始角度,结束角度和持续时间。旋转功能起作用,我可以将值放入并观察针的旋转。

我无法弄清楚如何做的是在任何一个依赖项属性改变时调用这个动画函数。将旋转函数设为静态是不合适的,因为旋转调用可能最终会成为实例特定的。

换句话说,我想实现的是PropertyChanged->计算新位置/速度 - >构建故事板并运行动画。

我的依赖属性而不是标准属性的推理是因为它们绑定到xaml的控制之外。

谢谢!

 private void AnimatePointer(double startAngle, double endAngle, TimeSpan length, string pointerName) 
    { 
     DoubleAnimation handRotation = new DoubleAnimation(); 
     handRotation.From = startAngle; 
     handRotation.To = endAngle; 
     handRotation.Duration = new Duration(length); 
     Storyboard.SetTargetName(handRotation, pointerName); 

     DependencyProperty[] propertyChain = 
      new DependencyProperty[] 
      { 
       Rectangle.RenderTransformProperty, 
       TransformGroup.ChildrenProperty, 
       RotateTransform.AngleProperty 
      }; 

     string anglePath = "(0).(1)[1].(2)"; 
     PropertyPath propPath = new PropertyPath(anglePath, propertyChain); 
     Storyboard.SetTargetProperty(handRotation, propPath); 

     Storyboard sb = new Storyboard(); 
     sb.Children.Add(handRotation); 
     sb.Begin(this); 
    } 

回答

5

我傻,但常被忽视的事实是所有的静态回调方法的第一个参数是实例,该方法被调用的。它只需输入到你的类型,然后可以通过它访问属性。

1

我认为你需要使用PropertyChangedCallback an example

+0

这个问题是PropertyChangedCallback必须是一个静态方法,所以我不能访问我的非静态的东西来动画 – brandon 2010-07-30 23:09:16

+0

嗯我想包装这个功能,并通过那里你的数据更新 – 2010-07-30 23:28:03

+0

也许你必须改变设计模式? 这样的东西 http://www.codeguru.com/csharp/csharp/cs_misc/userinterface/print.php/c12221 – 2010-07-30 23:43:56

相关问题