0

アプリ用のカスタム ハンバーガー メニューを作成しようとしています。レイアウトをすべてセットアップしましたが、何らかの理由でDoubleAnimation期待どおりに動作しません。Windows 10 で Cortana のハンバーガー メニューに似たものを実現しようとしています。コードでStoryboardandを作成DoubleAnimationしています (アニメーションが 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()かどうかを確認するために少し使用しました。StoryboardmenuPanel幅はまったく変わりません。私は他のいくつかのプロジェクトで同様のアプローチを使用しましたが、そこではうまく機能します。

編集:もう少し詳細を追加すると思いました。
私のアプリは Windows 10 をターゲットにしており、s とsmenuPanelを使用しない場合は自由に幅を変更できます。StoryboardDoubleAnimation

4

1 に答える 1