WPF TranslateTransform错误

时间:2012-06-17 02:22:29

标签: wpf storyboard

我有一个StackPanel,我左右滑动以使用TranslateTransform模拟移动页面。

如果我一旦运行良好,我会调用幻灯片方法。如果我快速连续两次调用我的幻灯片方法(在代码中),第二个转换的起始位置错误,最终位于错误的位置。

如何让我的第二次翻译“刷新”其起始位置?

这是StackPanel

    <StackPanel
        x:Name="MainPanel"
        Orientation="Horizontal">
        <StackPanel.RenderTransform>
            <TranslateTransform
                x:Name="MainPanelTransform"
                />
        </StackPanel.RenderTransform>
    </StackPanel>

以下是幻灯片代码:

    private void SlidePage(int pagesToMove)
    {
        Storyboard sb = SlideEffect(MainPanel, (-PageWidth * pagesToMove));
        sb.Completed += SlideCompleted;
        sb.Begin();
    }

    private Storyboard SlideEffect(UIElement controlToAnimate, double positionToMove)
    {
        //Get position of stackpanel
        var gt = controlToAnimate.TransformToVisual(MainGrid);
        var p = gt.Transform(new Point(0, 0));

        //add new storyboard and animation
        var sb = new Storyboard();
        var da = new DoubleAnimation { To = p.X + positionToMove };

        Storyboard.SetTarget(da, controlToAnimate);

        Storyboard.SetTargetProperty(da, new PropertyPath("RenderTransform.(TranslateTransform.X)"));
        //Storyboard.SetTargetProperty(da, new PropertyPath("RenderTransform.Children[0].X"));

        var ee = new ExponentialEase { Exponent = 6.0, EasingMode = EasingMode.EaseOut };
        da.EasingFunction = ee;

        sb.Children.Add(da);
        return sb;

    }

令人讨厌的代码行是:

var p = gt.Transform(new Point(0, 0));

第二次调用SlideEffect方法时,它与第一次具有相同的值。似乎动画正在缓冲并一起运行。有没有办法停止缓冲?

1 个答案:

答案 0 :(得分:0)

您是否尝试更改Storyboard的{​​{3}}属性?

<强>更新

我有一个FillBehavior,所以我无法重现你的情况。但我可能会建议你:

  1. 尝试停用EasingFunction。可能Storyboard.CompletedStoryboard实际完成之前触发;

  2. 您确定,该变换会改变实际坐标吗?我认为这是解决方案,但不确定。

  3. Storyboard.Completed中,您可以手动更新变换坐标:

    MainPanelTransform.BeginAnimation(TranslateTransform.XProperty, null);
    MainPanelTransform.X = -100;