У меня есть вызов DoubleAnimation
, который запускается при нажатии кнопки. Нажатие одной кнопки приводит к постепенному исчезновению элемента управления (1000 миллисекунд), которое снова затухает (500 миллисекунд). Теперь я замечаю, что если пользователь спам этой кнопки, он не исчезнет. У меня нет проблем с тем, что он никогда не исчезнет. Если пользователь снова нажимает кнопку, которая переключает триггер, затем щелкает еще раз с кратким (~ 1 секундой) паузой между щелчками, после чего элемент управления будет исчезать без проблем.Повторное вызов DoubleAnimation во время его работы
private void fader(bool fadeOut)
{
if ((!fadeOut && gripLbl.Visibility == Visibility.Hidden) ||
(fadeOut && gripLbl.Visibility == Visibility.Visible))
return;
if (fadeOut)
{
// Fade in grip
gripLbl.Opacity = 0;
gripLbl.Visibility = Visibility.Visible;
gripLblAnimation = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(1000));
}
else
{
// Fade out grip
gripLblAnimation = new DoubleAnimation(1, 0, TimeSpan.FromMilliseconds(500));
gripLblAnimation.Completed += delegate
{ gripLbl.Visibility = Visibility.Hidden; };
}
Timeline.SetDesiredFrameRate(gripLblAnimation, 60);
gripLbl.BeginAnimation(FrameworkElement.OpacityProperty, gripLblAnimation);
}
Любая помощь будет принята с благодарностью, единственное, что я могу найти, что помогает поворачивает вниз увядает из таймера вниз ниже 100 миллисекунд. Но если это возможно, я бы хотел, чтобы он просто остановил текущую анимацию, если она выполняется, и запустите новую.
Я попытался обнулить его, запустив новый BeginAnimation
со вторым параметром, равным нулю, и используя .Freeze()
перед тем, как сделать так, чтобы отменить текущую анимацию без везения.
Вы используете WPF? –
Да, я просто делаю это все прагматично, потому что я нашел, что легче с переменными, которые я в конечном итоге использую и тому подобное. И, честно говоря, я просто недостаточно знаком с WPF, недавно перешедшим из WinForms. – Lightor