2013-10-25 3 views
1

Я хочу сделать одновременно растущую и вращающуюся метку в XAML. Почему мой код не работает? (Текст растет, но не вращается)xaml rotate and grow label animation

<Window 
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
    Title = "Animation" 
    Height = "600" Width = "1000" WindowStartupLocation="CenterScreen"> 

    <Window.Resources> 
    <Storyboard x:Key="Storyboard"> 
      <DoubleAnimation 
      Storyboard.TargetProperty="FontSize" 
      From = "12" To = "200" Duration = "0:0:4" 
      RepeatBehavior = "Forever" AutoReverse="True"/> 
      <DoubleAnimation 
      Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" 
      From="0" To="360" Duration="0:0:4" 
      RepeatBehavior="Forever"/> 
     </Storyboard> 
    </Window.Resources> 

    <Label x:Name="myLabel" Content = "Some text"> 
     <Label.Triggers> 
     <EventTrigger RoutedEvent="Label.Loaded"> 
      <EventTrigger.Actions> 
      <BeginStoryboard Storyboard="{StaticResource Storyboard}"/> 
      </EventTrigger.Actions> 
     </EventTrigger> 
     </Label.Triggers> 
    </Label> 

</Window> 

ответ

3

Вы должны объявить RenderTranform (здесь это будет RotateTransform) для Label и Storyboard.TargetName="myLabel" отсутствуют в ваших DoubleAnimation определений. Если вы хотите узнать больше о Преобразованиях, вы найдете то, что вам нужно в here:

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

Следующий код исправляет эти проблемы и должны работать (проверено):

<Window 
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
    Title = "Animation" 
    Height = "600" Width = "1000" WindowStartupLocation="CenterScreen"> 

    <Window.Resources> 
    <Storyboard x:Key="Storyboard"> 
      <DoubleAnimation 
      Storyboard.TargetProperty="FontSize" Storyboard.TargetName="myLabel" 
      From = "12" To = "200" Duration = "0:0:4" 
      RepeatBehavior = "Forever" AutoReverse="True"/> 
        <DoubleAnimation 
      Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" Storyboard.TargetName="myLabel" 
      From="0" To="360" Duration="0:0:4" 
      RepeatBehavior="Forever"/> 
     </Storyboard> 
    </Window.Resources> 

    <StackPanel> 
    <Label x:Name="myLabel" Content = "Some text" RenderTransformOrigin="0.5,0.5"> 
     <Label.RenderTransform> 
      <RotateTransform/> 
     </Label.RenderTransform> 
     <Label.Triggers> 
     <EventTrigger RoutedEvent="Label.Loaded"> 
      <EventTrigger.Actions> 
      <BeginStoryboard Storyboard="{StaticResource Storyboard}"/> 
      </EventTrigger.Actions> 
     </EventTrigger> 
     </Label.Triggers> 
    </Label> 
    </StackPanel> 
</Window> 

Если вы можете, я бы посоветовал вам использовать Blend для создания анимации, это действительно (реально) облегчить процесс и заставляет вас сэкономить много времени! Here is a starting point;)

+0

Почему TransformGroup? Просто потому, что Blend создал его? Ваш пример будет проще и, следовательно, лучше без него. – Clemens

+0

Спасибо, что заметили и сообщили об этом @Clemens. Образец обновлен! – AirL