我正在尝试使用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'属性设置动画。有关详细信息,请参阅内部异常。
这里有什么问题?
答案 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/