Изменить продолжительность элемента управления DoubleAnimation с помощью ползунка

Я пытаюсь изменить продолжительность элемента управления DoubleAnimation по значению Slider, но это не дает эффекта. Не знаю почему?

Вот мой код:

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 ответ

Решение

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 атрибута, поэтому он будет возобновлен с того места, где он был, до остановки анимации

Другие вопросы по тегам