Show / Hide Table of Contents

Практическое руководство. Анимация размера элемента FrameworkElement

Чтобы анимация размера элемента FrameworkElement, можно анимировать его Width и Height свойства или использовать анимированное ScaleTransform.

В следующем примере анимируется размер двух кнопок с помощью этих двух подходов. Размер одной кнопки изменяется, анимируя его Width свойства, а другой изменяется посредством анимации ScaleTransform применяется к его RenderTransform свойство. Каждая кнопка содержит текст. Первоначально отображается текст, соответствующим образом в обеих кнопок, но искажается при изменении размера кнопок, текст в второй кнопки.

Пример

<!-- AnimatingSizeExample.xaml
     This example shows two ways of animating the size
     of a framework element. -->
<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://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 свойство не вызывает прохода макета.

Дополнительные сведения об анимации свойств см. в разделе Общие сведения об анимации. Дополнительные сведения о преобразованиях см. в разделе Общие сведения о преобразованиях.

Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX