WPF configuração target Storyboard em XAML
-
08-07-2019 - |
Pergunta
Eu tenho atualmente um conjunto de botões que eu gostaria de gatilhos conjunto para que cada um irá executar a mesma animação. Existe uma maneira em XAML para 'passar' o alvo para o storyboard para que eu não tenho que reescrever o storyboard de cada vez para cada alvo?
Solução
Se você não definir uma meta explícita, o alvo deve ser o elemento ao qual está sendo aplicada a animação. Gostaria de definir um estilo com o gatilho / animação sobre ele e aplicar o estilo a esses botões específicos que pretende apresentar esse comportamento. Por exemplo:
<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>
E, em seguida, em cada botão que deseja se comportar desta maneira:
<Button Style="{StaticResource MyButtonStyle}" ... />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow