【问题标题】:WPF Storyboard animation isn't fluidWPF 故事板动画不流畅
【发布时间】:2017-03-02 21:47:00
【问题描述】:

这是我想要做的:

使控件 1 可见,使控件 2 折叠,在 0.8 秒内将控件 1 上的不透明度从 1 设置为 0。

完成后立即执行以下操作:

使 control1 折叠,使 control2 可见,在 0.8 秒内将 control2 上的不透明度从 0 设置为 1。

我只是无法让它变得流畅,而且我没有想法。这是我所拥有的:

<Storyboard x:Key="sb">
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.8000000" Storyboard.TargetName="MainTabControl" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/>
        <DiscreteObjectKeyFrame KeyTime="00:00:00.8000000" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.8000000" Storyboard.TargetName="MainTabControl" Storyboard.TargetProperty="(UIElement.Opacity)">
        <LinearDoubleKeyFrame  KeyTime="00:00:00" Value="1"/>
        <LinearDoubleKeyFrame  KeyTime="00:00:00.8000000" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00.8000000" Duration="00:00:00.8000000" Storyboard.TargetName="SearchProjectsView" Storyboard.TargetProperty="(UIElement.Visibility)">
        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Collapsed}"/>
        <DiscreteObjectKeyFrame KeyTime="00:00:00.8000000" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00.8000000" Duration="00:00:00.8000000" Storyboard.TargetName="SearchProjectsView" Storyboard.TargetProperty="(UIElement.Opacity)">
        <LinearDoubleKeyFrame  KeyTime="00:00:00.0000000" Value="0"/>
        <LinearDoubleKeyFrame  KeyTime="00:00:00.8000000" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

【问题讨论】:

  • 是否可以发布示例项目的所有代码或压缩包,以便我们轻松运行并帮助解决问题?

标签: wpf xaml


【解决方案1】:

从您的问题中不清楚为什么要同时为 Opacity 和 Visbility 设置动画,但您的问题是第二个控件的 Visibility 动画应该立即开始,而不是在 0.8 秒后开始。

这应该可行:

<Storyboard>

    <ObjectAnimationUsingKeyFrames
        Storyboard.TargetName="MainTabControl" Storyboard.TargetProperty="Visibility">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
        <DiscreteObjectKeyFrame KeyTime="0:0:0.8" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>

    <ObjectAnimationUsingKeyFrames
        Storyboard.TargetName="SearchProjectsView" Storyboard.TargetProperty="Visibility">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
        <DiscreteObjectKeyFrame KeyTime="0:0:0.8" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>

    <DoubleAnimation
        Storyboard.TargetName="MainTabControl" Storyboard.TargetProperty="Opacity"
        From="1" To="0" Duration="0:0:0.8"/>

    <DoubleAnimation
        Storyboard.TargetName="SearchProjectsView" Storyboard.TargetProperty="Opacity"
        From="0" To="1" BeginTime="0:0:0.8" Duration="0:0:0.8"/>

</Storyboard>

【讨论】:

  • 因为如果控件不透明度为0,它仍然在窗口上绘制。它可能是完全透明的,但会阻挡其下方完全可见的元素。
  • 我认为 WPF 中的命中测试会忽略透明像素。
  • @BradleyUffner 不,它不会忽略它们。它只忽略null 背景填充画笔。
猜你喜欢
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 2016-07-02
  • 2013-01-25
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多