WP7 - 动画结束得太早,没有效果

时间:2011-08-28 15:21:50

标签: c# silverlight windows-phone-7 animation code-behind

我做了一个动画来旋转我的控制,但是当它变成trigert时它只是跳到最终位置然后立即返回到起始位置。

控件由后面的代码构成,并且是具有以下属性的TextBoxes:

FontSize = 45;
TextAlignment = TextAlignment.Center;
Widh = 40;
Heigh = 45;

我将TextBox存储在数组中,因此我使用以下代码触发动画:

foreach (TextBlock b in arrayOfTextBoxes)
{
    Rotate(b);
}

动画:

public static void Rotate(UIElement target)
{
        var projection = new PlaneProjection();
        target.Projection = projection;

        DoubleAnimation da = new DoubleAnimation();
        da.From = 0;
        da.To = 90;
        da.Duration = TimeSpan.FromSeconds(0.25);
        da.AutoReverse = false;

        Storyboard.SetTargetProperty(da, new PropertyPath(PlaneProjection.RotationZProperty));
        Storyboard.SetTarget(da, projection);

        Storyboard sb = new Storyboard();
        sb.Children.Add(da);

        EventHandler eh = null;
        eh = (s, args) =>
        {
            projection.RotationZ = 90;
            sb.Stop();
            sb.Completed -= eh;
        };
        sb.Completed += eh;

        sb.Begin();
}

编辑:现在我可以知道问题是什么。我每秒都有一个(有时两个)Dispatcher Times在后台滴答作响。当我禁用它们时,问题就消失了。但我无法做到,因为我需要它们来衡量时间。 在我触发动画之前对它们进行限制并再次启动它们确实没有帮助。 // DispetcherTimers执行此操作:

        void tikac_Tick(object sender, EventArgs e)
    {
        herniCas += new TimeSpan(0, 0, 1);
    }

<击>

1 个答案:

答案 0 :(得分:2)

动画故事板通常会保留最后一个值“直到它们被停止”。它们不会永久更改实际的属性值。他们只是改变它当前渲染的值(不是依赖属性很好吗?:))

当它在结束时明确地停止它时,值将恢复为其原始值。如果您希望值保持更改,请不要停止故事板,或者在动画更改时在代码中明确设置它。

你的例子中的动画是如此之快,它只是很快结束(故事板的启动时间可以是几帧,其间的任何时间都被跳过,因为动画是固定时间插值,而不是帧特定的。)