动画StackPanel高度代码隐藏

Stu*_*urm 1 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);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个AnimationException,说:

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

这有什么不对?

Cle*_*ens 7

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

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

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

或者你告诉动画从哪里开始

var expand = new DoubleAnimation(0, 200, TimeSpan.FromMilliseconds(500));
expandableStack.BeginAnimation(StackPanel.HeightProperty, expand);
Run Code Online (Sandbox Code Playgroud)

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

var expand = new DoubleAnimation(expandableStack.ActualHeight,
                                 200, TimeSpan.FromMilliseconds(500));
expandableStack.BeginAnimation(StackPanel.HeightProperty, expand);
Run Code Online (Sandbox Code Playgroud)