WPF Définition de la cible Storyboard en XAML
-
08-07-2019 - |
Question
Je souhaite actuellement définir des déclencheurs pour que chacun d'eux exécute la même animation. Existe-t-il un moyen dans XAML de "transmettre" la cible au storyboard afin que je n'ai pas à le réécrire à chaque fois pour chaque cible?
La solution
Si vous ne définissez pas de cible explicite, la cible devrait être l'élément auquel l'animation est appliquée. Je définirais un style avec le déclencheur / animation dessus et l’appliquerais aux boutons particuliers pour lesquels vous souhaitez afficher ce comportement. Par exemple:
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
<Style.Resources>
<Storyboard x:Key="OnMouseEnterStoryboard">
<DoubleAnimation BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" To="180" />
</Storyboard>
<Storyboard x:Key="OnMouseLeaveStoryboard">
<DoubleAnimation BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" To="0" />
</Storyboard>
</Style.Resources>
<Style.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<RemoveStoryboard BeginStoryboardName="OnMouseEnterStoryboard_BeginStoryboard"/>
<BeginStoryboard x:Name="OnMouseLeaveStoryboard_BeginStoryboard" Storyboard="{StaticResource OnMouseLeaveStoryboard}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard x:Name="OnMouseEnterStoryboard_BeginStoryboard" Storyboard="{StaticResource OnMouseEnterStoryboard}"/>
<RemoveStoryboard BeginStoryboardName="OnMouseLeaveStoryboard_BeginStoryboard"/>
</EventTrigger>
</Style.Triggers>
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform/>
</Setter.Value>
</Setter>
</Style>
Ensuite, sur chaque bouton, vous souhaitez vous comporter de la manière suivante:
<Button Style="{StaticResource MyButtonStyle}" ... />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow