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

时间:2009-07-07 12:47:45

标签: wpf xaml triggers animation

感谢this stackoverflow question上的答案,我能够使用以下动画,以便当我的ViewModel属性 PageToolBarVisible 的值导致工具栏淡入淡出时。

问题是:

  • 工具栏的不透明度淡出,但它消失的空间在淡出后仍然存在
  • 初始工具栏状态与ViewModel属性的值不同步

但是如果可能的话,如何在XAML中处理以下条件:

  • 工具栏(边框)淡出之后,我怎么说“然后只有那时Visibility = Collapsed”,(或许两个动画一次发生或链接动画如此visibile =折叠发生在第一个动画之后),编辑:我自己添加了Trigger Opacity = 0,效果很好
  • 之前工具栏淡入,我怎么说“Visibilty = Normal”
  • 如何将这些事件不仅附加到View Load流程,以便在页面首次显示时显示正确的状态(淡入或淡出)?

到目前为止,这是我的动画:

    <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>

1 个答案:

答案 0 :(得分:2)

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

关于第三点......如果我理解正确的话,那么可以使用FrameworkElement.Loaded事件来解决首次加载View时运行动画的问题。