【问题标题】:How restart the animation in UWP using Visible property?如何使用 Visible 属性重新启动 UWP 中的动画?
【发布时间】:2016-11-02 06:28:25
【问题描述】:

在 UWP 应用程序中,我在窗口底部显示一个错误栏,例如 Windows 10 的邮件应用程序。我的想法是当我将可见性更改为折叠时,动画就会开始。 动画仅在创建窗口时工作一次。我想在每次可见性从可见变为折叠时触发动画。 XAML 代码是:

 <StackPanel Grid.Row="1" Canvas.ZIndex="10"  Background="{StaticResource BackError}"  VerticalAlignment="Bottom" Name="NotificationStackPanel"  >
        <StackPanel.Transitions>
            <TransitionCollection>
                <PaneThemeTransition  Edge="Bottom"/>
            </TransitionCollection>
        </StackPanel.Transitions>
        <TextBlock VerticalAlignment="Center"  Foreground="White" Margin="20"  Name="NotificationText"/>
    </StackPanel>

我现在的解决方法是删除整个 StackPanel 并重新创建它,它可以工作,但看起来太丑了。

【问题讨论】:

  • 遗憾的是,转换没有提供很多交互可能性...如果您想使用PaneThemeTransition,那么您已经在以唯一可能的方式进行操作了。我能想到的唯一其他选择是使用情节提要动画。

标签: xaml win-universal-app uwp


【解决方案1】:

PaneThemeTransition 是一个过渡动画。通常,我们使用面板动画 (PaneThemeTransition) 来显示滑入屏幕很远距离的 UI,例如任务窗格或自定义软键盘。

过渡动画具有内置触发器(过渡),可以在添加、删除、重新排序等 UI 元素时自动运行。过渡动画很容易应用。但是我们对动画效果的时间和顺序没有太多的控制。

要重新启动面板动画,您可以从其父元素中删除StackPanel,然后再次添加它:

private bool isVisible = true;

private void ChangeVisibility()
{
    if (isVisible)
    {
        //Root is a Grid which is the parent element of NotificationStackPanel
        Root.Children.Remove(NotificationStackPanel);
    }
    else
    {
        Root.Children.Add(NotificationStackPanel);
    }
    isVisible = !isVisible;
}

【讨论】:

  • -1 你读过这个问题吗? “我现在的解决方法是删除整个 StackPanel 并重新创建它,它可以工作,但看起来太丑了。”
  • @Markus OP 说“重新创建它”,但没有必要重新创建它,所以在我的回答中,我说再次添加它,我认为这是重启面板动画的唯一方法。如果您有更好的方法,请分享!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2017-04-28
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多