1

我正在尝试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”属性设置动画。有关详细信息,请参阅内部异常。

这里有什么问题?

4

2 回答 2

7

当您没有通过设置From属性显式指定动画的开始值时,动画将从属性的当前值开始。但是,如果是这样NaN,则动画不知道从哪里开始。

因此,您有两个选择,要么明确设置 StackPanelHeight

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);
于 2013-07-14T18:30:02.807 回答
0

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

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

于 2013-07-14T18:13:53.103 回答