Плавное 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,

Другие вопросы по тегам