动画StackPanel高度代码隐藏

时间:2013-07-14 18:04:51

标签: c# wpf animation

我正在尝试使用StackPanel进行可扩展/可折叠CheckBox控制。首先,我尝试在XAML中直接执行此操作,但我无法轻松实现。对于我来说,为这项任务设置一些代码隐藏对我来说不是问题。到目前为止,我有:

private void activateCheck_Checked(object sender, RoutedEventArgs e)
{
    DoubleAnimation expand = new DoubleAnimation(200, TimeSpan.FromMilliseconds(500));
    expandableStack.BeginAnimation(HeightProperty, expand);
}

但是我得到一个说:

的AnimationException
  

无法使用'System.Windows.Media.Animation.DoubleAnimation'为'System.Windows.Controls.StackPanel'上的'Height'属性设置动画。有关详细信息,请参阅内部异常。

这里有什么问题?

2 个答案:

答案 0 :(得分:7)

如果未通过设置From属性显式指定动画的起始值,则动画将从属性的当前值开始。如果那是NaN,则动画不知道从哪里开始。

因此,你有两个选择,要么你明确地设置StackPanel的Height

var expand = new DoubleAnimation(200, TimeSpan.FromMilliseconds(500));
expandableStack.Height = 0;
expandableStack.BeginAnimation(StackPanel.HeightProperty, expand);

或者告诉动画从哪里开始

var expand = new DoubleAnimation(0, 200, TimeSpan.FromMilliseconds(500));
expandableStack.BeginAnimation(StackPanel.HeightProperty, expand);

如果您想从当前高度开始,可以使用ActualHeight作为起始值:

var expand = new DoubleAnimation(expandableStack.ActualHeight,
                                 200, TimeSpan.FromMilliseconds(500));
expandableStack.BeginAnimation(StackPanel.HeightProperty, expand);

答案 1 :(得分:-1)

如果默认情况下未设置宽度和高度属性(或double类型的任何其他属性),则无法为其设置动画(在这种情况下,它们的值将为NaN)。因此,您也可以使用ScaleTransform实现它。请查看此博客文章。希望它有所帮助。

http://marlongrech.wordpress.com/2009/09/07/animating-width-and-height-when-they-are-double-nan/