故事板动画中的错误?

时间:2011-08-04 16:40:14

标签: windows-phone-7

昨天我没有得到答案,但也许我对这个问题的理解不够深入,无法提出正确的问题。

故事是关于动画ListBox高度。以下是后续截图:

a)“中”是一个TextBlock

Image1

b)“中”TextBlock被ListBox取代。用户选择一个项目。这将启动ListBox.Height的动画。动画完成后,ListBox将替换为原始TextBlock。 (无视数据的差异。当我不得不使用渲染帧时,图像的收集是一个痛苦的过程。其中一个图像是为不同的记录拍摄的。)

Img2 Img3 Img4

此序列适用于偶尔的闪烁。我想知道发生了什么,过了一段时间我得到了这个截图:

Img5

你看到的是截获Storyboard.Completed事件后的第一帧。据我所知,这是故事板的最终结果。

注意:

  • 我在这一刻检查了视觉树,没有发现任何可疑之处。

  • 这只是其中一种影响。另一个常见的案例是带有蓝色阴影的大小调整的1行ListBox;在这种情况下,列表框上方的所有元素都会消失。第三种可能性是整个屏幕上的对角红线。

以下是定义Storyboard的代码:

    private Storyboard GetDropDownAnimation(double from, double to)
    {
        double secs = this.IsExpanded ? 0.2 : 0.4;
        CubicEase ease = new CubicEase() { EasingMode = EasingMode.EaseInOut };
        DoubleAnimation animation = new DoubleAnimation()
        {
            Duration = new Duration(TimeSpan.FromSeconds(secs)),
            From = from,
            To = to,
            FillBehavior = FillBehavior.HoldEnd,
            EasingFunction = ease
        };
        Debug.WriteLine("Animation Height {0} -> {1}", from, to);

        Storyboard.SetTarget(animation, this);
        Storyboard.SetTargetProperty(animation, new PropertyPath("Height"));

        Storyboard sb = new Storyboard();
        sb.Children.Add(animation);
        return sb;
    }

我可以解释其他技巧(很长一段时间我都确信存在问题),但看起来这个问题只涉及动画本身。

任何人都能解释发生了什么事吗?

2 个答案:

答案 0 :(得分:2)

Have a look at these before you continue this way it might make your life a bit easier :)

那说,看一下动画的起始值(从),看看它是否正确。

如果所有其他方法都失败了,您可以从完全透明的列表框开始。

答案 1 :(得分:0)

我在可能值得报道的问题上取得了一些进展。

起初我用自己的动画取代了Storyboard。我开始使用CompositionTarget.Rendering回调。代码相当简单:在回调中,您需要按经过时间的比例更新ListBox高度。我仔细检查了每次高度变化都有一个LayoutUpdated事件,换句话说,屏幕始终处于同步状态。 (一个惊喜。)

结果:闪烁仍然存在。

结论:故事板是无辜的。

然后我发现了一些有趣的东西: 因为高度操作在我手中,我只是将值四舍五入到行高的整数倍。猜猜是什么 - 闪烁消失了!

请注意,有问题的ListBox是使用引用字符串属性的ItemsSource和DisplayMemberPath设置的。未设置ItemTemplate。换句话说,使用相当标准的ListBox。

这不是答案,我知道,但我发现它很有趣。