【问题标题】:Change Duration of DoubleAnimation Control by Slider通过滑块更改 DoubleAnimation 控件的持续时间
【发布时间】:2013-12-24 04:50:33
【问题描述】:

我正在尝试通过 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));
        }

任何帮助将不胜感激!提前致谢。

【问题讨论】:

    标签: c# wpf slider wpf-animation doubleanimation


    【解决方案1】:

    RepeatBehavior="Forever" 设置为 True,因此此动画将永远运行,并在持续时间设置为 0:0:1 的情况下启动。

    如果您删除 RepeatBehavior="Forever" 并挂钩一个事件,例如 MouseLeftButtonDown,它会按预期工作。


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

    在故事板上设置名称:

    <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 属性,这样它就会从停止动画之前的位置恢复。

    【讨论】:

    • 太棒了!我做到了。非常感谢 Rohit Vats 先生。
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多