鉴于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?
所以,如果我不能用绑定做到这一点,怎么办呢?
答案 0 :(得分:0)
通常你会使用{TemplateBinding ...}而不是{Binding ...},但这只适用于简单,兼容的类型。
您还应该能够使用"relative binding source"绑定到模板化控件。如果类型不匹配,这也允许您使用值转换器。
SpeedRation={Binding SomeProperty, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource SomeConverter}}"
我没有在WPF中测试过这个,但Silverlight通常是功能受限的。
答案 1 :(得分:0)
好吧,所以看起来真的没有办法严格用绑定来处理这个问题。因此,为了解释它,我已经在代码隐藏中隐藏事件以适当地开始/调整动画。