用滑块改变DoubleAnimation控制的持续时间

时间:2013-12-24 04:50:34

标签: c# wpf slider wpf-animation doubleanimation

我正在尝试通过Slider的值更改DoubleAnimation控件的持续时间,但它不会生效。我不知道为什么?

这是我的代码:

XAML:

<Border.Triggers>
    <EventTrigger RoutedEvent="Loaded">
       <BeginStoryboard>
           <Storyboard Storyboard.TargetName="borUpperTranslate" Storyboard.TargetProperty="X">
               <DoubleAnimation Name="dbaUpperTranslate" From="418" To="230" Duration="0:0:1" RepeatBehavior="Forever" AutoReverse="True"/>
            </Storyboard>
       </BeginStoryboard>
    </EventTrigger>

C#:

 private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            Slider sl = sender as Slider;
            dbaUpperTranslate.Duration = new Duration(TimeSpan.FromSeconds(sl.Value));
        }

任何帮助都会很感激!提前谢谢。

1 个答案:

答案 0 :(得分:3)

RepeatBehavior="Forever"设置为True,因此此动画将永久运行,并且持续时间设置为0:0:1。

如果您移除RepeatBehavior="Forever"并挂钩事件MouseLeftButtonDown,则会按预期工作。


但是,如果您想使用RepeatBehavior="Forever"进行更新,则需要stop animation first, set duration and than restart animation

在storyBoard上设置名称:

<Storyboard Storyboard.TargetName="borUpperTranslate"
            Storyboard.TargetProperty="X" Name="storyboard">

在处理程序中:

Slider sl = sender as Slider;
storyboard.Stop();
dbaUpperTranslate.Duration = new Duration(TimeSpan.FromSeconds(sl.Value));
storyboard.Begin();

此外,如果你不想看起来生涩,你应该考虑删除From属性,这样它就会在停止动画之前从它离开的地方恢复。