I have complicated animation, which has to run at startup and every time when mouse leaves buttons (I have many buttons)
<Window.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard x:Name="storyboard">
<Storyboard>
...
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<!-- I have to do this for every button -->
<EventTrigger RoutedEvent="MouseEnter" SourceName="button1">
<SeekStoryboard BeginStoryboardName="storyboard" Offset="0"/>
<PauseStoryboard BeginStoryboardName="storyboard"/>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave" SourceName="button1">
<ResumeStoryboard BeginStoryboardName="storyboard"/>
</EventTrigger>
</Window.Triggers>
Instead of creating new animations I reuse just one, which was played in Loaded
, this is why here Seek..
, Pause..
and ResumeStoryboard
.
Everything works fine, but there is a lot of duplicated code.
I started thinking of making a style for buttons to avoid WET xaml coding. At first, I tried this (simply to see if idea is good)
<Button x:Name="button1">
<Button.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<SeekStoryboard BeginStoryboardName="storyboard" Offset="0"/>
...
Not very surprisingly I got an exception
System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Seek'; Storyboard='System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode='56868664'; Storyboard.Type='System.Windows.Media.Animation.Storyboard'; TargetElement='System.Windows.Controls.Button'; TargetElement.HashCode='23765798'; TargetElement.Type='System.Windows.Controls.Button'
I have feeling it should be something to do with Storyboard.Target...
, but trying to give window name produces same error
<Window x:Name="window"
...
<SeekStoryboard BeginStoryboardName="storyboard" Offset="0" Storyboard.TargetName="window"/>
What should I do? My aim is to have button style (defined in window resources), but I have problem to target storyboard within window triggers from child control event trigger.