Практическое руководство. Анимация размера элемента FrameworkElement
Обновлен: Ноябрь 2007
Для анимации размера элемента FrameworkElement можно анимировать его свойства Width и Height или использовать анимированное преобразование ScaleTransform.
В следующем примере анимируется размер двух кнопок с помощью этих двух подходов. Размер одной кнопки изменяется анимированием его свойства Width, а размер другой изменяется анимированием преобразования ScaleTransform, применяемого к свойству RenderTransform. Каждая кнопка содержит текст. Изначально текст отображается одинаково на обеих кнопках, но так как размеры кнопок изменяются, текст на второй кнопке искажается.
Пример
<!-- AnimatingSizeExample.xaml
This example shows two ways of animating the size
of a framework element. -->
<Page
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Microsoft.Samples.Animation.AnimatingSizeExample"
WindowTitle="Animating Size Example">
<Canvas Width="650" Height="400">
<Button Name="AnimatedWidthButton"
Canvas.Left="20" Canvas.Top="20"
Width="200" Height="150"
BorderBrush="Red" BorderThickness="5">
Click Me
<Button.Triggers>
<!-- Animate the button's Width property. -->
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="AnimatedWidthButton"
Storyboard.TargetProperty="(Button.Width)"
To="500" Duration="0:0:10" AutoReverse="True"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
<Button
Canvas.Left="20" Canvas.Top="200"
Width="200" Height="150"
BorderBrush="Black" BorderThickness="3">
Click Me
<Button.RenderTransform>
<ScaleTransform x:Name="MyAnimatedScaleTransform"
ScaleX="1" ScaleY="1" />
</Button.RenderTransform>
<Button.Triggers>
<!-- Animate the ScaleX property of a ScaleTransform
applied to the button. -->
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyAnimatedScaleTransform"
Storyboard.TargetProperty="(ScaleTransform.ScaleX)"
To="3.0" Duration="0:0:10" AutoReverse="True"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Canvas>
</Page>
При преобразовании элемента преобразуется весь элемент и его содержимое. При непосредственном изменении размер элемента, как в случае первой кнопки, размер содержимого элемента не изменяется, так как его размер и положение не зависят от размера родительского элемента.
Анимация размера элемента с применением анимированного преобразования к его свойству RenderTransform обеспечивает большую производительность, чем непосредственная анимация свойств Width и Height, так как свойство RenderTransform не запускает цикл обработки макета.
Дополнительные сведения о свойствах анимации см. в разделе Общие сведения об эффектах анимации. Дополнительные сведения о преобразованиях см. в разделе Общие сведения о классах Transform.