1

このUserControlは、約10行10列のグリッドです。各セルには、1つのテキストブロックまたは1〜6個の画像が含まれています。私がやりたいのは、スライドインするために各行のすべての要素をアニメーション化することです。しかし、それを行うためにGrid.Row全体をアニメーション化する方法を見つけることができません。

すべての要素をstackpanel/canvasにラップすることはできません。これは、それらが同じ列に配置されるためです...

誰かがこれに対する解決策を持っていますか?

ありがとう

4

1 に答える 1

1

だから私は実用的な解決策を考え出し、それは機能しています。それほどエレガントではないかもしれませんが、Lumia 920デバイスで本来の機能を果たし、非常にうまく機能します。

void CreateLoadAnimationForRow(int row, int startTime)
    {
        foreach (var child in LayoutRoot.Children.Cast<FrameworkElement>().Where(x => Grid.GetRow(x) == row))
        {
            AddToStoryboard(child, startTime);
        }
    }
    void AddToStoryboard(FrameworkElement element, int startTime)
    {
        element.RenderTransform = new CompositeTransform();
        var doubleAnimation = new DoubleAnimation
        {
            From = -200,
            To = 0,
            Duration = new Duration(TimeSpan.FromSeconds(1)),
            BeginTime = TimeSpan.FromMilliseconds(startTime)
        };

        var objectAnimationUsingKeyFrames = new ObjectAnimationUsingKeyFrames()
        {
            BeginTime = TimeSpan.FromMilliseconds(startTime + 10)
        };
        var discreteObjectKeyFrame = new DiscreteObjectKeyFrame()
        {
            KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)),
            Value = Visibility.Visible
        };

        objectAnimationUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame);

        IEasingFunction easingFunction = new SineEase();
        easingFunction.Ease(2);
        doubleAnimation.EasingFunction = easingFunction;

        Storyboard.SetTarget(objectAnimationUsingKeyFrames, element);
        Storyboard.SetTargetProperty(objectAnimationUsingKeyFrames, new PropertyPath("Visibility"));

        Storyboard.SetTarget(doubleAnimation, element);
        Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(CompositeTransform.TranslateX)"));

        storyboardSlideIn.Children.Add(doubleAnimation);
        storyboardSlideIn.Children.Add(objectAnimationUsingKeyFrames);

    }
于 2013-02-13T13:01:26.030 に答える