为什么我的DoubleAnimation没有工作?

时间:2015-10-07 01:39:04

标签: c# easing wpf-animation hamburger-menu doubleanimation

我正试图为我的应用制作自定义汉堡包菜单。我有所有设置的布局,但由于某种原因,我的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   如果我不使用menuPanelStoryboard,我可以自由更改DoubleAnimation的宽度。

1 个答案:

答案 0 :(得分:0)

我找到了this answer on a similar question,现在我的动画效果很好。

  

我自己想通了。我所要做的就是在DoubleAnimation上启用相关动画(EnableDependentAnimation),因为此动画会影响布局。然后它运作得很好。