为什么我的DoubleAnimation不能工作?

本文关键字:工作 不能 DoubleAnimation 我的 为什么 | 更新日期: 2023-09-27 18:16:25

我正试图为我的应用程序制作一个自定义汉堡包菜单。我有布局所有设置,但是,出于某种原因,我的DoubleAnimation没有像我预期的那样工作。我试图实现类似于Windows 10上Cortana的汉堡菜单。我在我的代码中创建了StoryboardDoubleAnimation(即使我的动画是在XAML中创建的,我仍然有同样的问题)。我有:

menuButton.Click += (s, e) => {
    if (menuIsOpen) {
        Animate(
            menuPanel,
            "Width",
            ActualWidth, //Page.ActualWidth
            50,
            0.1,
            new Duration(new TimeSpan(TimeSpan.TicksPerSecond)));
    }
    else {
        Animate(
            menuPanel,
            "Width",
            50,
            ActualWidth, //Page.ActualWidth
            0.1,
            new Duration(new TimeSpan(TimeSpan.TicksPerSecond)));
    }
    menuIsOpen = !menuIsOpen;
};

Animate()的签名:

private void Animate(DependencyObject item, string property, double from, double to, double? by, Duration duration) {
    var storyboard = new Storyboard();
    var animation = new DoubleAnimation();
    animation.From = from;
    animation.To = to;
    animation.Duration = duration;
    animation.EasingFunction = new SineEase() { EasingMode = EasingMode.EaseInOut };
    animation.By = by;
    Storyboard.SetTarget(animation, item);
    Storyboard.SetTargetProperty(animation, property);
    storyboard.Children.Add(animation);
    storyboard.Begin();
}

我使用了一点Debug.WriteLine()来查看Storyboard是否实际运行,它确实在运行。menuPanel的宽度没有改变。我在我的一些其他项目中使用了类似的方法,并且效果很好。

编辑:我想我应该添加更多的细节。
我的应用瞄准的是Windows 10如果我不使用Storyboard s和DoubleAnimation s,我可以自由地改变menuPanel的宽度。

为什么我的DoubleAnimation不能工作?

我在一个类似的问题上找到了这个答案,现在我的动画工作得很好。

我自己弄明白了。我所要做的就是在DoubleAnimation上启用依赖动画(EnableDependentAnimation),因为这个动画会影响布局。然后它就完美地工作了。