我有一个 StackPanel,我正在左右滑动以使用 TranslateTransform 模拟移动页面。
如果我调用幻灯片方法一次它运行良好。如果我快速连续调用我的幻灯片方法两次(在代码中),则第二次转换的起始位置错误并最终出现在错误的位置。
如何让我的第二个翻译“刷新”它的起始位置?
这是堆栈面板
<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 方法时,它的值与第一次相同。似乎动画正在缓冲并一起运行。有没有办法停止缓冲?