1
我有一個StackPanel,我左右滑動來模擬使用TranslateTransform的移動頁面。WPF TranslateTransform Error
如果我調用幻燈片方法,一旦運行良好。如果我快速連續兩次(在代碼中)調用我的幻燈片方法,則第二個轉換的起始位置錯誤,並以錯誤的地方結束。
如何獲得第二個翻譯來「刷新」其起始位置?
這裏是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方法它具有與第一次相同的值。看起來動畫正在緩衝並一起運行。有什麼辦法可以停止緩衝嗎?
好主意。嘗試了Stop和HoldEnd同樣的問題。我相信問題是由於動畫的異步性質。第二個是在第一個更新值之前開始的。 –
@SteveChadbourne:我已經更新了我的答案。 –
我認爲問題是由動畫的異步性造成的。第二個動畫在第一個動畫完成或甚至稱爲「完成」之前運行。我改變了代碼,直接使用TranslateTransform而不使用故事板,並且一切正常。 –