Анимация EnterActions не останавливается, а анимация ExitActions не запускается

#.net #wpf #xaml #storyboard #datatrigger

#.net #wpf #xaml #раскадровка #datatrigger

Вопрос:

одно из приложений моей компании отображает всплывающие окна с помощью элемента управления контентом, расположенного по центру экрана, который скрыт до тех пор, пока он не понадобится, и прямоугольника с радиальным градиентом за ним, чтобы блокировать остальную часть пользовательского интерфейса, плюс это выглядит красиво. Я пытаюсь добавить анимацию, когда отображаются как прямоугольник, так и всплывающее окно, а не просто появляются. Анимация ввода работает хорошо, но анимация выхода никогда не вызывается, когда мое всплывающее окно закрыто, и эффекты анимации ввода остаются постоянными.

Мой XAML выглядит следующим образом:

 <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Panel.ZIndex="999" DataContext="{Binding Source={x:Static popup:PopUpService.Instance}}" IsHitTestVisible="{Binding IsPopUpVisible}" Opacity="0">
        <Rectangle Fill="{DynamicResource RadialBlackToBlack}" />
        <ItemsControl Focusable="False" ItemsSource="{Binding PopUps}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid IsItemsHost="True" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <Grid.Style>
            <Style TargetType="Grid">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsPopUpVisible, Source={x:Static popup:PopUpService.Instance}}" Value="True">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                        To="100" Duration="0:0:1"/>

                                </Storyboard>
                            </BeginStoryboard>

                        </DataTrigger.EnterActions>
                        <DataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                        To="0" Duration="0:0:1" />
                                </Storyboard>
                            </BeginStoryboard>
                        </DataTrigger.ExitActions>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Grid.Style>
    </Grid>
  

Что я делаю не так?

Спасибо.

Ответ №1:

Непрозрачность должна анимироваться на 1 not 100 , это вызывает проблему. (Анимация от 100 to 1 не видна, а последний бит от 1 to 0 занимает мало времени анимации)

Возможно, вы также хотите избавиться от избыточности:

  1. Не устанавливайте свойства дважды или без необходимости, отбросьте Duration на Storyboards и все HoldEnd s, которые используются по умолчанию.
  2. Почему AutoReverse в первом SB есть an?

Комментарии:

1. Но когда IsPopUpVisible становится ложным, условия запуска больше не выполняются, и анимация выхода должна срабатывать, не так ли? IsPopUpVisible не делает всплывающие окна невидимыми сразу, я намерен сделать это с помощью анимации выхода, установив непрозрачность в 0.

2. @SoManyGoblins: Отредактировав свой ответ, я заметил некоторую серьезную задержку в вашем коде, потому что анимация переходит от 100 к 0 и 1 видна только разница (допустимый диапазон равен 0 1`), но в конечном итоге это сработало, сделав сетку невидимой.