我有一个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方法时,它与第一次具有相同的值。似乎动画正在缓冲并一起运行。有没有办法停止缓冲?
答案 0 :(得分:0)
您是否尝试更改Storyboard
的{{3}}属性?
<强>更新强>
我有一个FillBehavior,所以我无法重现你的情况。但我可能会建议你:
尝试停用EasingFunction
。可能Storyboard.Completed
在Storyboard
实际完成之前触发;
您确定,该变换会改变实际坐标吗?我认为这是解决方案,但不确定。
在Storyboard.Completed
中,您可以手动更新变换坐标:
MainPanelTransform.BeginAnimation(TranslateTransform.XProperty, null);
MainPanelTransform.X = -100;