1

TranslateTransform を使用してページの移動をシミュレートするために左右にスライドする StackPanel があります。

スライドメソッドを一度呼び出すと、うまく機能します。スライド メソッドを (コードで) 立て続けに 2 回呼び出すと、2 番目の変換の開始位置が正しくなく、最終的に間違った場所になります。

2 番目の翻訳を取得して開始位置を「更新」するにはどうすればよいですか?

ここにスタックパネルがあります

    <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 メソッドを 2 回目に呼び出すと、最初と同じ値になります。アニメーションがバッファリングされ、一緒に実行されているようです。バッファリングを停止する方法はありますか?

4

1 に答える 1

0

のFillBehaviorプロパティを変更しようとしましたStoryboardか?

アップデート:

VS にバグがあるため、状況を再現できませんでした。しかし、私はあなたをお勧めします:

  1. を無効にしてみてくださいEasingFunction。実際に完了Storyboard.Completedする前に発生する可能性があります。Storyboard

  2. その変換は実際の座標を変更しますか? それが解決策だと思いますが、よくわかりません。

  3. では、Storyboard.Completed変換座標を手動で更新できます。

    MainPanelTransform.BeginAnimation(TranslateTransform.XProperty, null);
    MainPanelTransform.X = -100;
    
于 2012-06-17T07:01:26.160 に答える