UWP ComboBox 不再具有打开/关闭动画(内部版本 14393)

Posted

技术标签:

【中文标题】UWP ComboBox 不再具有打开/关闭动画(内部版本 14393)【英文标题】:UWP ComboBox no longer has open/close animations (build 14393) 【发布时间】:2017-05-24 09:40:27 【问题描述】:

我在我的 UWP 应用中设计了一个 ComboBox 的样式,并且我正在尝试为控件中缺少的下拉动画想出一个解决方案。

看起来打开/关闭动画已在周年更新中删除,我的意思是,出于某种原因,它们仍在“设置”应用中播放,但我不再在我自己的应用、计算器或任何其他应用中看到它们为 Windows 10 14393 编译的 UWP 应用。

这是我在 ComboBox 模板中看到的:

<VisualStateGroup x:Name="DropDownStates">
  <VisualState x:Name="Opened">
    <Storyboard>
      <SplitOpenThemeAnimation OpenedTargetName="PopupBorder"
                               ClosedTargetName="ContentPresenter"
                               OffsetFromCenter="Binding RelativeSource=RelativeSource TemplatedParent, Path=TemplateSettings.DropDownOffset"
                               OpenedLength="Binding RelativeSource=RelativeSource TemplatedParent, Path=TemplateSettings.DropDownOpenedHeight"/>
    </Storyboard>
  </VisualState>
  <VisualState x:Name="Closed">
    <Storyboard>
      <SplitCloseThemeAnimation OpenedTargetName="PopupBorder"
                                ClosedTargetName="ContentPresenter"
                                OffsetFromCenter="Binding RelativeSource=RelativeSource TemplatedParent, Path=TemplateSettings.DropDownOffset"
                                OpenedLength="Binding RelativeSource=RelativeSource TemplatedParent, Path=TemplateSettings.DropDownOpenedHeight"/>
    </Storyboard>
  </VisualState>
</VisualStateGroup>

那些SplitOpenThemeAnimation 动画并不是真正的动画,因为它们的行为就像一个setter,它们的效果是即时的,根本没有动画。

我想知道是否有一种简单的方法可以恢复以前的动画(也许我只是缺少一个简单的选项/参数来添加到 XAML 中?)而不必手动弄乱模板并编写我自己的剪辑/转换动画,这是我不想在这里做的事情,因为如果 MS 在未来的构建中再次更改模板,我会白费力气。

这里有什么建议吗?谢谢!

编辑:目前这是我正在使用的解决方法,但我希望有一些东西可以像原始动画一样保持幻灯片/剪辑动画。

<VisualState x:Name="Opened">
  <Storyboard>
    <DoubleAnimation Storyboard.TargetName="Popup"
                     Storyboard.TargetProperty="Opacity"
                     From="0"
                     To="1"
                     Duration="0:0:0.2">
    <DoubleAnimation.EasingFunction>
      <CircleEase EasingMode="EaseOut"/>
    </DoubleAnimation.EasingFunction>
  </DoubleAnimation>
  <DoubleAnimation Storyboard.TargetName="PopupTransform"
                   Storyboard.TargetProperty="(TranslateTransform.Y)"
                   From="-20"
                   To="0"
                   Duration="0:0:0.2">
    <DoubleAnimation.EasingFunction>
      <CircleEase EasingMode="EaseOut"/>
    </DoubleAnimation.EasingFunction>
  </DoubleAnimation>
  <!--Original SplitOpenAnimation here-->
</Storyboard>

【问题讨论】:

【参考方案1】:

此错误通常发生在已在系统级别禁用动画的开发人员机器上。内置动画遵循此系统设置。您可以仔细检查。

【讨论】:

您好,杰瑞,不幸的是,这不是问题(该选项对我来说是打开的)。正如我所说,我在我的应用程序、其他第 3 方应用程序和系统应用程序(如计算器,甚至设置应用程序)中都看到了相同的行为。它是 ComboBox 本身的模板,它随着周年更新而改变(检查生成 14393 的 generic.xaml 文件)。老实说,我不知道 UI 团队为什么做出这个选择,我只是想知道是否有更好的方法来恢复它。当然,内置动画比像我现在做的那样手动重新实现它们要好。谢谢!

以上是关于UWP ComboBox 不再具有打开/关闭动画(内部版本 14393)的主要内容,如果未能解决你的问题,请参考以下文章

关闭 UWP 应用后,具有完全信任进程的 Windows 应用程序打包项目保持运行

将 UWP ComboBox ItemsSource 绑定到 Enum

UWP Combobox 项目无缘无故滚动到中间

使用 URL 方案关闭 UWP 应用

win10 uwp 重启软件

专业的基于 jQuery 的 Combobox 控件? [关闭]