Изменение ширины/высоты столбца/строки сетки с помощью анимации раскадровки в приложении Магазина Windows

Я ищу способ изменить ширину столбца сетки (или высоту строки) с помощью анимации, определенной в Storyboard. Я уже нашел несколько решений для приложений WPF, но все они бесполезны в случае программирования в Магазине Windows, например:

Ширина столбца сетки изменяется при анимации

как изменить высоту строки сетки в wpf с помощью раскадровки

http://www.codeproject.com/Articles/18379/WPF-Tutorial-Part-2-Writing-a-custom-animation-cla

Можно ли получить такой результат, создав собственный класс, наследуемый от Timeline? Если да, то какие компоненты следует переопределить для правильной реализации?


person Zacateras    schedule 23.06.2013    source источник


Ответы (2)


Вы должны быть в состоянии использовать простой DoubleAnimation. Обязательно установите EnableDependentAnimation=True, как указано здесь .

Одна вещь, которую нужно понимать, когда пробуете что-то, это то, что ColumnDefinitions это GridLength struct. Дополнительную информацию о них можно найти здесь. Вам нужно, чтобы анимация установила свойство Value.

person Nate Diamond    schedule 23.06.2013
comment
Свойство GridLength.Value не имеет установщика. Я считаю, что для работы с DoubleAnimation также должно быть свойство зависимости. - person grimus; 04.12.2013
comment
Ах, вы частично правы. GridLength — это struct, поэтому вам нужно установить Width для ColumnDefinition на новый Gridlength. - person Nate Diamond; 05.12.2013
comment
Не могли бы вы опубликовать пример кода, как это сделать с помощью DoubleAnimation? Это было бы очень полезно и очень ценно. - person grimus; 05.12.2013

Вот пример метода анимации Grid ColumnDefinition MaxWidth.

    private void Animate(ColumnDefinition column)
    {
        Storyboard storyboard = new Storyboard();

        Duration duration = new Duration(TimeSpan.FromMilliseconds(500));
        CubicEase ease = new CubicEase { EasingMode = EasingMode.EaseOut };

        DoubleAnimation animation = new DoubleAnimation();
        animation.EasingFunction = ease;
        animation.Duration = duration;
        storyboard.Children.Add(animation);
        animation.From = 1000;
        animation.To = 0;
        animation.EnableDependentAnimation = true;
        Storyboard.SetTarget(animation, column);
        Storyboard.SetTargetProperty(animation, "(ColumnDefinition.MaxWidth)");

        storyboard.Begin();
    }
person Ali    schedule 06.01.2014