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