2015-04-22 5 views
1

У меня есть вызов 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() перед тем, как сделать так, чтобы отменить текущую анимацию без везения.

+0

Вы используете WPF? –

+0

Да, я просто делаю это все прагматично, потому что я нашел, что легче с переменными, которые я в конечном итоге использую и тому подобное. И, честно говоря, я просто недостаточно знаком с WPF, недавно перешедшим из WinForms. – Lightor

ответ

1

Вам необходимо включить флаг, когда он затухает. Что-то вроде:

bool fading = true; 

Так что в начале вы можете поставить:

if(Fading) return; 

Таким образом, если пользователь затирание кнопки она будет постоянно возвращаться (т.е. игнорируя их) до замирания булева не сбрасываются в конце замирания.

fading = false; 
+0

Моя ошибка, у меня есть базовая проверка, которая, я думаю, достаточно хороша? Я просто использую его, чтобы сохранить ненужное выполнение функции. Но это не улавливает это, что на самом деле не проблема, потому что я не хочу игнорировать запрос. Я хочу остановить текущее исчезновение и начать новый. Я редактировал свой пример кода. – Lightor

+0

Является ли ваша переменная 'fadeOut' статической? – Setherith

+0

fadeOut подается как параметр. – Lightor

Смежные вопросы