【问题标题】:How to make a XAML animation make the element disappear AFTER it has faded out如何使 XAML 动画在元素淡出后消失
【发布时间】:2010-11-08 16:37:15
【问题描述】:

感谢this stackoverflow question 上的回答,我能够让以下动画正常工作,因此当我的 ViewModel 属性 PageToolBarVisible 的值导致工具栏淡入淡出时。 p>

问题是:

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

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

  • 工具栏(边框)淡出之后,我该怎么说“然后只有 Visibility=Collapsed”,(可能同时发生两个动画或链接动画如此可见=collapsed 发生在第一个动画之后),编辑:我在下面添加了 Trigger Opacity=0,效果很好
  • 工具栏淡入之前,我怎么说“Visibilty=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>

【问题讨论】:

    标签: wpf xaml triggers animation


    【解决方案1】:

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

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

    【讨论】:

    • FraneworkElement.Loaded 应该是 Window.Triggers 的一部分。至于不透明度触发器,我不确定为什么它不起作用。另一种方法是向完成的事件添加一个方法以在代码隐藏中设置可见性(但我知道你想将它保留在 XAML 中)
    • 我添加了两个建议,第一个 (trigger opacity=0) 效果很好,但第二个 (frameworkelement.loaded) 导致错误,它到底需要去哪里?
    • 好的,我把 放在 Windows.Triggers 中,如上图所示,但是我如何告诉它“执行“PageToolBarStyle”中包含的触发逻辑?
    • 如果您将情节提要创建为资源......那么您可以调用该资源。
    • 但是我不想调用 StoryBoard FadeIn 或 StoryBoard FadeOut,我想调用 STYLE 以便它执行这个逻辑 然后 ITSELF 适当地选择要执行的 StoryBoard(ViewModel 属性在启动时可能是 true 或 false)。
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2015-07-19
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多