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

时间:2010-11-26 05:32:30

标签: c# .net wpf animation binding

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

我有一个自定义对象,每隔一段时间就会改变一次。 UI控件应该反映最新状态 - 所以我正在尝试使用绑定,但我无法将其连接起来。

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

理想情况下,此动画详细信息的所有应位于UI(xaml)中 - 我更新的对象不想了解UI详细信息。 Blend4中的工具似乎无法胜任工作,而我在xaml中的黑客攻击无处可寻......

我是否应该有另一个对象来侦听源对象的更改,然后每次都配置动画?是不是全部都在xaml? '真正的'代码?

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

1 个答案:

答案 0 :(得分: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);
}

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