Reutilizar Storyboard existente

Esta es una forma posible de hacer esto:

<Button.Triggers>         
  <EventTrigger RoutedEvent="Button.Click">    
    <BeginStoryboard>
      <Storyboard>
        <ColorAnimation 
          Storyboard.TargetName="myAnimatedBrush"
          Storyboard.TargetProperty="Color"
          From="Red" To="Blue" Duration="0:0:7" />
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger>
</Button.Triggers>

Pero digamos que tengo:

      <Storyboard x:Name="name">
        <ColorAnimation 
          Storyboard.TargetName="myAnimatedBrush"
          Storyboard.TargetProperty="Color"
          From="Red" To="Blue" Duration="0:0:7" />
      </Storyboard>

y quiero reutilizarlo varias veces.

<Button.Triggers>         
  <EventTrigger RoutedEvent="Button.Click">    
    <BeginStoryboard>
      //
      // <--->  what whould I put here??
      //
    </BeginStoryboard>
  </EventTrigger>
</Button.Triggers>

Solo me interesa un XAML, no c #.

Edit:

Después de usar las sugerencias de las respuestas, recibí un error:

El valor del atributo {StaticResource myStoryboard} está fuera de rango.

preguntado el 08 de noviembre de 11 a las 18:11

¿Es esto realmente Silverlight? Silverlight solo admite EventTrigger para Loaded evento. -

2 Respuestas

Conviértalo en un recurso y utilícelo StaticResource para llamarlo.

[considerando que todos los recursos están definidos en App.xaml]

<Application.Resources>
    <Storyboard x:Key="MyStoryboard">
        ....
    </Storyboard>
</Application.Resources>

Luego, en la instancia del botón

<Button.Triggers>         
    <EventTrigger RoutedEvent="Button.Click">    
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"
                         x:Name="MyStoryboard_Begin"/>
    </EventTrigger>
<Button.Triggers>

NOTA: el x:Name no es necesario, pero es útil si desea asegurarse de que este guión gráfico esté detenido antes de ejecutar otro guión gráfico: en otro uso de disparador StopStoryboard.

respondido 08 nov., 11:23

Usarías un StaticResource almacenado en un ResourceDictionary.

A ResourceDictionary puede estar en un archivo dedicado o definido dentro del contenedor correspondiente; por ejemplo, puede usar un archivo de recursos dedicados globales para cargar el uso y en toda la aplicación (un ejemplo de esto es cargar Temas en WPF), o localmente, proporcionando recursos "privados" expuestos (aunque probablemente aún sean accesibles con rutas totalmente calificadas, o algún tipo de vudú, no estoy seguro) al control concerniente, digamos.

Entonces, para definirlo ...

<UserControl.Resources>
  <Storyboard x:Key="myStoryboard">
    <ColorAnimation 
      Storyboard.TargetName="myAnimatedBrush"
      Storyboard.TargetProperty="Color"
      From="Red" To="Blue" Duration="0:0:7" />
  </Storyboard>
</UserControl.Resources>

Y para utilizarlo ...

<... Storyboard="{StaticResource myStoryboard}" />

respondido 08 nov., 11:23

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.