WPF Установка цели раскадровки в XAML
-
08-07-2019 - |
Вопрос
В настоящее время у меня есть набор кнопок, которые я хотел бы установить триггеры, чтобы каждая из них выполняла одну и ту же анимацию. Есть ли способ в XAML «передать» цель в раскадровку, чтобы мне не приходилось каждый раз переписывать раскадровку для каждой цели?
Решение
Если вы не установили явную цель, целью должен быть элемент, к которому применяется анимация. Я бы определил стиль с помощью триггера / анимации и применил бы стиль к тем конкретным кнопкам, для которых вы хотите продемонстрировать это поведение. Например:
<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>
И затем на каждой кнопке вы хотите вести себя так:
<Button Style="{StaticResource MyButtonStyle}" ... />
Не связан с StackOverflow