如何在VisualState中控制Storyboard的SpeedRatio?

时间:2010-08-17 14:00:19

标签: wpf silverlight data-binding animation visualstatemanager

鉴于VisualStateManager作为ControlTemplate的一部分启动的故事板,我如何根据控件的属性更改调整该动画的SpeedRatio?

<ControlTemplate>
  <Grid>
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup>
        <VisualState>
          <Storyboard Name="SpinningThing"
                      SpeedRatio="{Binding SpinningSpeedRatio}">
            ...

这需要在WPF和Silverlight中都有效。

我不认为我可以出于多种原因设置绑定。最重要的是,Storyboard是Freezable所以你不能只是在WPF中设置SpeedRatio。但是,如果它是由VisualStateManager启动的,我可以在它上面调用SetSpeedRatio吗?

此外,由于其父级是VisualState,这是否意味着没有与之关联的管理FrameworkElement?

所以,如果我不能用绑定做到这一点,怎么办呢?

2 个答案:

答案 0 :(得分:0)

通常你会使用{TemplateBinding ...}而不是{Binding ...},但这只适用于简单,兼容的类型。

您还应该能够使用"relative binding source"绑定到模板化控件。如果类型不匹配,这也允许您使用值转换器。

SpeedRation={Binding SomeProperty, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource SomeConverter}}" 

我没有在WPF中测试过这个,但Silverlight通常是功能受限的。

答案 1 :(得分:0)

好吧,所以看起来真的没有办法严格用绑定来处理这个问题。因此,为了解释它,我已经在代码隐藏中隐藏事件以适当地开始/调整动画。