【问题标题】:ColorAnimation, Completed event doesn't work more then onceColorAnimation, Completed 事件不止一次起作用
【发布时间】:2015-05-23 07:50:50
【问题描述】:

我有代码:

<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}" />

还有代码隐藏:

    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,它只工作一次,第二次以上颜色一直保持黑色,我该如何解决?

【问题讨论】:

  • 试试这个:Resources["KeysBorderBrush"] = new SolidColorBrush(Colors.DimGray)
  • 我试图重现您的问题,但动画不适用于香草 WPF ComboBox - 似乎 ComboBox 的默认控件模板不尊重 BorderBrush 依赖属性(见msdn.microsoft.com/en-us/library/ms752094(v=vs.110).aspx)。您是否修改了默认控件模板? Active_Checked 处理程序何时触发?
  • Reza ArabQaeni,是的,这个变种也可以,tnx

标签: wpf wpf-animation coloranimation


【解决方案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);
}

【讨论】:

  • 天哪,一行代码...这正是我要找的!像魅力一样工作,tnx 很多。
猜你喜欢
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
相关资源
最近更新 更多