2012-06-17 26 views
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方法它具有與第一次相同的值。看起來動畫正在緩衝並一起運行。有什麼辦法可以停止緩衝嗎?

回答

0

您是否嘗試更改的FillBehavior財產?

UPDATE:

我有一個bug in VS,所以我無法重現你的情況。但我可能會推薦你:

  1. 嘗試禁用EasingFunction。也許Storyboard.CompletedStoryboard實際完成之前發生;

  2. 你確定,這個變換會改變實際座標嗎?我認爲這是解決方案,但不確定。

  3. Storyboard.Completed你可以手動更新變換座標:

    MainPanelTransform.BeginAnimation(TranslateTransform.XProperty, null); 
    MainPanelTransform.X = -100; 
    
+0

好主意。嘗試了Stop和HoldEnd同樣的問題。我相信問題是由於動畫的異步性質。第二個是在第一個更新值之前開始的。 –

+0

@SteveChadbourne:我已經更新了我的答案。 –

+0

我認爲問題是由動畫的異步性造成的。第二個動畫在第一個動畫完成或甚至稱爲「完成」之前運行。我改變了代碼,直接使用TranslateTransform而不使用故事板,並且一切正常。 –

相關問題