Jak animować styl

Ten przykład pokazuje, jak animować właściwości w stylu. Podczas animacji w obrębie stylu tylko element Framework, dla którego zdefiniowany jest styl, może być bezpośrednio kierowany. Aby określić obiekt docelowy obiektu Freezable, należy "kropka" na podstawie właściwości elementu style.

W poniższym przykładzie kilka animacji jest zdefiniowanych w stylu i stosowane do Button . Gdy użytkownik przesuwa wskaźnik myszy nad przyciskiem, stopniowo przechodzi od nieprzezroczystego do częściowego odpółprzezroczystego i tyłu. Gdy użytkownik przesuwa przycisk myszy, staje się całkowicie nieprzezroczysty. Po kliknięciu przycisku jego kolor tła zmieni się z pomarańczowy na biały i z powrotem. Ponieważ SolidColorBrush nie można bezpośrednio wskazywać przycisku użytego do malowania, jest on dostępny przez kropkowane polecenie z Background właściwością przycisku.

Przykład

<!-- StyleStoryboardsExample.xaml
     This example shows how to create storyboards in a style. -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  WindowTitle="Storyboards in Styles Example" Background="White">
  <Page.Resources>
  
    <!-- Defines a Button style. -->
    <Style TargetType="{x:Type Button}" x:Key="MyButtonStyle">
      <Setter Property="Button.Background">
        <Setter.Value>
          <SolidColorBrush Color="Orange" />
        </Setter.Value>
      </Setter>
      <Style.Triggers>
      
        <!-- Animates the button's opacity on mouse over. -->
        <EventTrigger RoutedEvent="Button.MouseEnter">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Storyboard.TargetProperty="(Button.Opacity)"
                  From="1.0" To="0.5" Duration="0:0:0.5" AutoReverse="True"
                  RepeatBehavior="Forever" />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>  
        
        <!-- Returns the button's opacity to 1 when the mouse leaves. -->
        <EventTrigger RoutedEvent="Button.MouseLeave">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <DoubleAnimation
                  Storyboard.TargetProperty="(Button.Opacity)"
                  To="1" Duration="0:0:0.1" />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>   
        
        <!-- Changes the button's color when clicked. 
             Notice that the animation can't target the
             SolidColorBrush used to paint the button's background
             directly. The brush must be accessed through the button's
             Background property. -->
        <EventTrigger RoutedEvent="Button.Click">
          <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <ColorAnimation 
                  Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
                  From="Orange" To="White" Duration="0:0:0.1" AutoReverse="True" />
              </Storyboard>
            </BeginStoryboard>
          </EventTrigger.Actions>
        </EventTrigger>  
      </Style.Triggers>
    </Style>
  </Page.Resources>
  
  <StackPanel Margin="20">
    <Button Style="{StaticResource MyButtonStyle}">Click Me</Button>
  </StackPanel>
</Page>

Należy pamiętać, że podczas animacji w stylu istnieje możliwość, że obiekty docelowe nie istnieją. Załóżmy na przykład, że styl używa SolidColorBrush do ustawiania właściwości tła przycisku, ale w pewnym momencie styl jest zastępowany, a tło przycisku jest ustawione na LinearGradientBrush . Próba SolidColorBrush przeprowadzenia animacji nie spowoduje wygenerowania wyjątku; animacja po prostu zakończy się niepowodzeniem.

Aby uzyskać więcej informacji na temat składni docelowej scenorysu, zobacz Omówienie scenorysów. Aby uzyskać więcej informacji na temat animacji, zobacz Omówienie animacji. Aby uzyskać więcej informacji na temat stylów, zobacz Style i tworzenia szablonów.