Плавное ExitAction в WPF Trigger с использованием раскадровки
У меня есть приложение WPF, и здесь я хочу переопределить уродливые стили WPF по умолчанию. Я создал словарь Styles.xaml, и здесь я почти закончил со стилями, но есть некоторые проблемы с анимацией и плавным переходом между различными визуальными состояниями (триггерами).
Одна из моих проблем заключалась в том, что я не хочу, чтобы какие-либо обработчики событий C# или другой код C# были привязаны к стилям.
Здесь я предоставляю код для моего триггера:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsPressed" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard Name="MouseOverStoryboard">
<Storyboard Duration="0:0:0.25" SlipBehavior="Grow">
<ColorAnimation Storyboard.TargetName="InnerBorder"
Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
To="{StaticResource White}"
BeginTime="0:0:0" Duration="0:0:0.25" />
<DoubleAnimation Storyboard.TargetName="InnerBorder"
Storyboard.TargetProperty="Opacity"
To="0.3"
BeginTime="0:0:0" Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="MouseOverStoryboard" />
</MultiTrigger.ExitActions>
</MultiTrigger>
Чтобы сделать анимацию плавной, я добавил EnterAction и поместил раскадровку здесь с временами, чтобы ввод анимации был плавным и выглядел хорошо.
Мой первый вопрос был о том, как вернуться к цвету по умолчанию при выполнении моей BeginStoryboard, но потом я понял, что могу использовать RemoveStoryboard.
Теперь я действительно не знаю, у меня есть идеи - как сделать плавную анимацию выхода? Я не должен использовать RemoveStoryboard?
Пожалуйста, предоставьте предложения. Благодарю.
PS Я не использую VisualStateManager из-за отсутствия состояний и не хочу реализовывать свои собственные элементы управления для этого.
1 ответ
Как насчет добавления нового объекта анимации, который начинается по истечении времени действия анимации ввода? Или как насчет использования ExitAction
свойство вашего триггера, добавив Storyboard
это возвращает ваше EnterAction
, Или вы можете попытаться установить Fillbehavior
свойство "Стоп...
Другой вариант заключается в использовании EventSetter
ловить RoutedEvents
лайк MouseEnter
а также MouseLeave
,