【问题标题】:Animate StackPanel height code-behind动画 StackPanel 高度代码隐藏
【发布时间】:2013-07-15 02:30:02
【问题描述】:

我正在尝试使用CheckBox 控制可扩展/可折叠StackPanel。首先,我尝试直接在 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”属性设置动画。有关详细信息,请参阅内部异常。

这里有什么问题?

【问题讨论】:

  • 内部异常怎么说?
  • "'System.Windows.Media.DoubleAnimation' 不能使用默认原始值 'NaN'"
  • 然后给StackPanel.Height一些值,使它不是NaN
  • 或者设置动画的From属性。

标签: c# wpf animation


【解决方案1】:

当您没有通过设置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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这不是真的。您可以简单地设置动画的From 属性。
    • 那不是说我们要设置一些值来启动动画吗?
    • 没错。如果您没有通过设置From 明确指定起始值,则动画将从当前属性值开始。但是,如果当前值为NaN,则动画不知道从哪里开始并抛出异常。
    • 所以这就是我在回答中所说的,如果默认情况下未设置宽度和高度(它们的值为 NaN),则无法为它们设置动画。您必须进行一些初始化才能启动动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多