Wpf 如何制作XAML动画使元素在淡出后消失

Wpf 如何制作XAML动画使元素在淡出后消失,wpf,xaml,triggers,animation,Wpf,Xaml,Triggers,Animation,多亏了上的答案,我能够使以下动画正常工作,因此当我的ViewModel属性PageToolBarVisible的值导致工具栏淡入淡出时 问题是: 工具栏不透明度会淡出,但它所占用的空间在淡出后仍然存在 初始工具栏状态与ViewModel属性的值不同步 但如果可能的话,如何在XAML中处理以下条件: 当工具栏(边框)淡出后,我该如何说“然后才可见=折叠”(可能两个动画同时发生,或者链接动画如此可见=折叠发生在第一个动画之后),编辑:我在下面添加了触发器不透明度=0,效果非常好 在工具栏淡入之

多亏了上的答案,我能够使以下动画正常工作,因此当我的ViewModel属性PageToolBarVisible的值导致工具栏淡入淡出时

问题是:

  • 工具栏不透明度会淡出,但它所占用的空间在淡出后仍然存在
  • 初始工具栏状态与ViewModel属性的值不同步
但如果可能的话,如何在XAML中处理以下条件:

  • 当工具栏(边框)淡出后,我该如何说“然后才可见=折叠”(可能两个动画同时发生,或者链接动画如此可见=折叠发生在第一个动画之后),编辑:我在下面添加了触发器不透明度=0,效果非常好
  • 工具栏淡入之前,如何说“Visibility=Normal”
  • 如何不仅将这些事件附加到视图加载过程,而且在页面首次出现时显示正确的状态(淡入或淡出)
以下是我迄今为止的动画:

    <Style x:Key="PageToolBarStyle" TargetType="Border">
        <Style.Triggers>
            <DataTrigger Binding="{Binding PageToolBarVisible}" Value="true">

                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetProperty="Opacity"
                                From="0.0" 
                                To="1.0" 
                                Duration="0:0:2"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>

                <DataTrigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetProperty="Opacity"
                                From="1.0" 
                                To="0.0" 
                                Duration="0:0:2"/>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.ExitActions>

            </DataTrigger>

            <Trigger Property="Opacity" Value="0">
                <Setter Property="Visibility" Value="Collapsed"/>
            </Trigger>

        </Style.Triggers>
    </Style>

<Window.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <EventTrigger.Actions>
            ...how can I tell it here to "do the trigger logic contained in "PageToolBarStyle"...
        </EventTrigger.Actions>
    </EventTrigger>
</Window.Triggers>

…我如何在这里告诉它“执行“PageToolBarStyle”中包含的触发逻辑”。。。

您可以为相关元素的不透明度创建一个触发器。一旦该触发器为“0”,您就可以设置元素的可见性。这应该可以处理上面的第一点和第二点


至于第三点……若我理解正确,那个么就有一个FrameworkElement.Loaded事件,你们可以用它来解决第一次加载视图时运行动画的问题。

FraneworkElement.Loaded应该是Window.Triggers的一部分。至于不透明触发器,我不确定为什么不起作用ve是向完成的事件添加一个方法来设置代码隐藏中的可见性(但我知道您希望将其保留在XAML中)我添加了两个建议,第一个(触发器不透明度=0)效果很好,但第二个(frameworkelement.loaded)导致错误,它需要精确到哪里?好的,我把Windows.Triggers放在上面显示的位置,但是我如何告诉它“执行”PageToolBarStyle中包含的触发逻辑?如果您将情节提要创建为资源。。。然后你可以直接调用资源。但我不想调用情节提要FadeIn或情节提要FadeOut,我想调用样式,以便它执行此逻辑,然后自己适当地选择要执行的情节提要(ViewModel属性在启动时可能为true或false)。