代码之家  ›  专栏  ›  技术社区  ›  MojoFilter

如何控制VisualState中故事板的速度比?

  •  1
  • MojoFilter  · 技术社区  · 16 年前

    给定一个由VisualStateManager作为ControlTemplate的一部分启动的故事板,我如何根据控件的属性更改调整动画的速度比?

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

    这需要在WPF和Silverlight中都能工作。

    我认为我不能在那里设置一个绑定,原因有很多。最重要的是,故事板是免费的,所以你不能只是去设置速比都随意在WPF。但是,如果它是由VisualStateManager启动的,我可以称它为setspeedratio吗?

    另外,由于它的父级是一个VisualState,这是否意味着没有管理框架元素与之相关?

    所以,如果我不能用装订,怎么能做到呢?

    2 回复  |  直到 16 年前
        1
  •  0
  •   iCollect.it Ltd    16 年前

    通常,您会使用模板绑定…而不是绑定…,但这只适用于简单、兼容的类型。

    您还应该能够使用 "relative binding source" . 这还允许您在类型不匹配时使用值转换器。

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

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

        2
  •  0
  •   MojoFilter    16 年前

    好吧,看起来真的没有办法用绑定来严格地处理这个问题。因此,为了说明这一点,我在代码后面挂上了事件,以便根据需要启动/调整动画。