动画打破绑定

Animation breaks binding

我有一个 ComboBox,其 Opacity 属性 具有以下绑定:

Opacity="{Binding ElementName=stackPanel, Path=IsMouseOver, Converter={StaticResource mouseOverConverter}}"

基本上,如果 IsMouseOver 属性 为真,则 ComboBoxOpacity 为 1,否则为 0.4。

现在我将此动画应用到 ComboBox:

private void AnimateComboBox()
{
  DoubleAnimation da = new DoubleAnimation();
  da.From = 0.4;
  da.To = 1;
  da.Duration = TimeSpan.FromSeconds(0.8);
  da.AutoReverse = true;

  ComboClassList.BeginAnimation(ComboBox.OpacityProperty, da);  
}

效果不错,但之后 ComboBox 的绑定就不再起作用了。当我将鼠标移到 StackPanel 上时,Opacity 没有改变。为什么动画会破坏我的绑定? Snoop 说,绑定仍然存在,尽管它在 Snoop 中以红色突出显示。

动画默认保持最终的 属性 值。要更改它,请将其 FillBehavior 属性 设置为 Stop:

var animation = new DoubleAnimation
{
    From = 0.4,
    To = 1,
    Duration = TimeSpan.FromSeconds(0.8),
    AutoReverse = true,
    FillBehavior = FillBehavior.Stop
};

动画结束时,属性 将设置回绑定提供的值。