2015-05-23 6 views
0

У меня есть код:ColorAnimation, Завершена событие не работает более чем один раз

<UserControl.Resources> 
    <SolidColorBrush x:Key="KeysBorderBrush" Color="DimGray" /> 
</UserControl.Resources> 

<ComboBox Name="Keys" HorizontalAlignment="Left" Margin="116,2,0,2" Width="122" BorderBrush="{DynamicResource KeysBorderBrush}" /> 

И CodeBehind:

SolidColorBrush keysBorderBrush; 
    ColorAnimation _keysAnimation; 

    public Constructor() 
    { 
     _keysAnimation = new ColorAnimation(); 
     _keysAnimation.Completed += _keysAnimation_Completed; 
    } 

    private void Active_Checked(object sender, RoutedEventArgs e) 
    { 

     keysBorderBrush = (SolidColorBrush)this.FindResource("KeysBorderBrush"); 
     keysBorderBrush.Color = Colors.Black; 

     _keysAnimation.To = Colors.Red; 
     _keysAnimation.AutoReverse = true; 
     _keysAnimation.RepeatBehavior = new RepeatBehavior(2); 
     _keysAnimation.DecelerationRatio = .1; 
     _keysAnimation.Duration = TimeSpan.FromMilliseconds(500); 

     keysBorderBrush.BeginAnimation(SolidColorBrush.ColorProperty, _keysAnimation); 

    } 
    void _keysAnimation_Completed(object sender, EventArgs e) 
    { 
     keysBorderBrush.Color = Colors.DimGray; 
    } 

Моя цель: Установите черный цвет, а затем анимировать, а затем возвращение цвет до серого в событии _keysAnimation_Completed.

Проблема в обработчике событий _keysAnimation_Completed, он не хочет, чтобы цвет вернулся к DimGray, он работает только один раз, во втором + цвете остается в черном все время, как я могу его исправить?

+0

Попробуйте это: Ресурсы [ «KeysBorderBrush»] = новый SolidColorBrush (Colors.DimGray) –

+0

Я пытался воспроизвести вашу проблему, но анимация не работает с ванильный WPF 'ComboBox' - кажется, что шаблон управления по умолчанию' ComboBox' не учитывает свойство зависимостей 'BorderBrush' (см. https://msdn.microsoft.com/en-us/library/ms752094(v=vs 0,110) .aspx). Вы изменили шаблон управления по умолчанию? А когда запускается обработчик 'Active_Checked'? – feO2x

+0

Reza ArabQaeni, Да, этот вариант тоже работает, tnx – SkyDancer

ответ

1

Если вы добавите _keysAnimation.FillBehavior = FillBehavior.Stop, он будет работать так, как вы ожидаете.

Ваш метод Active_Checked должен выглядеть следующим образом:

private void Active_Checked(object sender, RoutedEventArgs e) 
{ 
    _keysBorderBrush = (SolidColorBrush) FindResource("KeysBorderBrush"); 
    _keysBorderBrush.Color = Colors.Black; 

    _keysAnimation.To = Colors.Red; 
    _keysAnimation.AutoReverse = true; 
    _keysAnimation.RepeatBehavior = new RepeatBehavior(2); 
    _keysAnimation.DecelerationRatio = .1; 
    _keysAnimation.Duration = TimeSpan.FromMilliseconds(500); 
    _keysAnimation.FillBehavior = FillBehavior.Stop; 

    _keysBorderBrush.BeginAnimation(SolidColorBrush.ColorProperty, _keysAnimation); 
} 
+0

О, Боже, одна строка кода ... Это именно то, что я искал! Работает как шарм, tnx alot. – SkyDancer