WPF Impostazione dello storyboard target in XAML
-
08-07-2019 - |
Domanda
Al momento ho una serie di pulsanti che vorrei impostare i trigger in modo che ognuno esegua la stessa animazione. Esiste un modo in XAML per 'passare' il target allo storyboard in modo che non debba riscrivere lo storyboard ogni volta per ciascun target?
Soluzione
Se non si imposta un target esplicito, il target dovrebbe essere l'elemento al quale viene applicata l'animazione. Definirei uno stile con il trigger / animazione su di esso e applicherei lo stile a quei pulsanti particolari che si desidera mostrare questo comportamento. Ad esempio:
<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 poi su ogni pulsante che vuoi comportarti in questo modo:
<Button Style="{StaticResource MyButtonStyle}" ... />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow