Как анимировать высоту управления в Windows 8 XAML

У меня возникла проблема с простой анимацией высоты надписей на основе раскадровки в приложении С#/XAML в стиле Metro в Windows 8.

Следующий тривиальный XAML и код за фрагментами отлично работают в Silverlight 5 и Windows Phone 7, но ничего не делают в Windows 8 (по крайней мере для меня):

<Page.Resources>
    <Storyboard x:Name="expandAnimation">
        <DoubleAnimation Storyboard.TargetName="scaleButton" Storyboard.TargetProperty="Height" From="50" To="200" Duration="0:0:1"/>
    </Storyboard>
</Page.Resources>

<StackPanel Width="200">
    <Button x:Name="scaleButton" Click="scaleButton_Click" Content="Scale"/>
    <Button Content="Another button"/>
    <Button Content="Yet another button"/>
</StackPanel>

Код С#:

private void scaleButton_Click(object sender, RoutedEventArgs e)
{
    expandAnimation.Begin();
}

Тот же код может быть изменен для анимации других свойств элемента управления, например, Opacity, который работает как ожидалось.

Я могу анимировать ScaleTransform для масштабирования, но он изменяет внутренний рендеринг элемента управления и не влияет на расположение соседних элементов управления, что является проблемой для меня.

Надеюсь, я не пропущу ничего очевидного здесь, но разве это не должно работать?

Ответы

Ответ 1

Вам просто нужно добавить EnableDependentAnimation="True", а затем он должен работать нормально.

Ответ 2

Зависимая анимация - это та, которая приведет к повторной компоновке Xaml. Дорогая; поэтому требуется "отказ".

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.ui.xaml.media.animation.pointanimation.enabledependentanimation.aspx

Если возможно, вы должны использовать преобразование визуализации и масштабировать визуальный элемент. Это независимое значение, что остальным элементам страницы не нужно будет перемещаться для размещения.