【问题标题】:Reversing a wpf Visual State transition反转 wpf 视觉状态转换
【发布时间】:2012-03-01 19:30:26
【问题描述】:

我有一个具有两种视觉状态的自定义 WPF 控件 - 启用和禁用。禁用状态有一个简单的过渡动画,它会禁用控件,然后在短暂延迟后将其淡出。然后我有动画的反面,它在控件中淡入淡出,并在转换到启用状态时重新启用它(没有延迟)。

我遇到的问题是,如果我在它开始淡出之前将状态从禁用更改为启用,然后我仍然必须等待淡入动画才能重新启用控件,其中实际上,它可以直接启用控件,并避免淡入部分。

解决此问题的正确方法是什么?我有点需要根据禁用过渡故事板中的当前时间设置“启用”过渡故事板的起点(减去初始延迟)。

我猜另一种方式是有两种状态,一种是禁用,另一种是褪色。一旦禁用状态动画完成,如果可以从故事板更改视觉状态,我可以在禁用故事板完成后进入褪色状态。然后我可以定义从 Disabled 到 Enabled 和 Faded 到 Enabled 的不同转换。

这可能吗?

谢谢!

【问题讨论】:

    标签: wpf storyboard visualstatemanager


    【解决方案1】:

    对于启用和禁用动画,我猜你是否正确地定义了 From 和 To 值?这将解释您描述的行为。

    如果您省略 From 值,仅指定 To 值,则指定属性将从其当时的任何值(例如,半褪色)动画到您指定的任何值。这不是将值弹出到您指定的 From 值,然后动画到 To 值。

    【讨论】:

    • 我的故事板中有许多步骤可以从禁用状态变为启用状态。但是,就您而言,在一个简单的动画中,例如只需更改不透明度,您就可以通过不设置 From 属性来接近我们想要的行为。但是仍然有一个缺点 - 动画需要尽可能长的时间,无论它是从 0% 还是 50% 不透明度开始。这意味着淡出看起来更慢,延迟变得烦人。
    • 我试图让淡入淡出花费一半的时间,如果淡入只允许执行正常持续时间的一半。是的,如果你想知道,我是一个完美主义者。
    • 听起来你需要根据动画需要走多远来设置 SpeedRatio 属性。
    • 那么......我如何找到“动画需要走多远”?我需要能够获取状态变化动画的当前时间,然后在反向状态变化动画中设置正确的开始时间。这可能吗?
    • 嗯,我更多地考虑将您正在制作动画的任何属性的当前值与 To 值进行比较。完全差异与该差异的比率是 SpeedRatio。实际上,您想要的是属性更改的速度相同。这可以通过改变持续时间或速度比来实现,以便 (SpeedRatio) * (To value - current value) / (Duration) 在所有情况下都相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多