.net 进入动画未停止,退出动画未启动

.net 进入动画未停止,退出动画未启动,.net,wpf,xaml,storyboard,datatrigger,.net,Wpf,Xaml,Storyboard,Datatrigger,我公司的一个应用程序通过一个以屏幕为中心的内容控件来显示弹出窗口,该控件在需要时隐藏起来,并且在其后面有一个径向渐变矩形来阻挡UI的其余部分,而且它看起来很漂亮。我试图为矩形和弹出窗口都显示时添加动画,而不是仅仅弹出。“输入”动画效果良好,但在关闭“我的弹出窗口”时,将永远不会调用“退出”动画,并且“输入”动画的效果将保持永久性 我的XAML如下所示: <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Panel

我公司的一个应用程序通过一个以屏幕为中心的内容控件来显示弹出窗口,该控件在需要时隐藏起来,并且在其后面有一个径向渐变矩形来阻挡UI的其余部分,而且它看起来很漂亮。我试图为矩形和弹出窗口都显示时添加动画,而不是仅仅弹出。“输入”动画效果良好,但在关闭“我的弹出窗口”时,将永远不会调用“退出”动画,并且“输入”动画的效果将保持永久性

我的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
而不是
100
,这会导致问题。(从
100
1
的动画不可见,从
1
0
的最后一位动画时间很短)

也许你也想摆脱冗余:

  • 不要两次或不必要地设置属性,将
    持续时间
    放在
    情节提要
    和所有的
    HoldEnd
    上,这是默认设置
  • 为什么在第一个SB中有一个
    自动翻转

  • 但是当IsPopUpVisible变为false时,触发条件将不再满足,退出动画将启动,不是吗?IsPopUpVisible不会立即使弹出窗口不可见,我打算通过将“不透明度”设置为0的退出动画来实现这一点。@SoManyGoblins:编辑了我的答案,我在您的代码中观察到一些重大延迟,因为动画从
    100
    变为
    0
    ,只有在
    1
    时才能看到差异(有效范围是
    0
    到1`),但最终它确实起到了使网格不可见的作用。