2012-01-13 85 views
2

我在動畫列表框中的項目時遇到了一些麻煩。 OpacityProperty的動畫效果很好,但是當我嘗試動畫ListBoxItem的位置時,它不會移動一英寸(不會引發異常,甚至不會顯示指示錯誤的日誌消息)。如何動畫ListBoxItem位置

這裏是我使用的代碼:

private void deletAnimation() 
    { 
     Todo todoToDelete = App.ViewModel.Todos[1]; 

     Storyboard storyboard = new Storyboard(); 

     DoubleAnimation alphaAnim = new DoubleAnimation(); 
     alphaAnim.From = 1; 
     alphaAnim.To = 0; 
     alphaAnim.Duration = new Duration(TimeSpan.FromMilliseconds(500)); 
     ListBoxItem target = TodoList.ItemContainerGenerator.ContainerFromItem(todoToDelete) as ListBoxItem; 
     Storyboard.SetTarget(alphaAnim, target); 
     Storyboard.SetTargetProperty(alphaAnim, new PropertyPath(UIElement.OpacityProperty)); 

     storyboard.Children.Add(alphaAnim); 

     for (int i = App.ViewModel.Todos.IndexOf(todoToDelete) + 1; i < App.ViewModel.Todos.Count; i++) 
     { 
      Todo todo = App.ViewModel.Todos[i]; 
      target = TodoList.ItemContainerGenerator.ContainerFromItem(todo) as ListBoxItem; 

      DoubleAnimation translateAnim = new DoubleAnimation(); 
      translateAnim.From = target.RenderTransformOrigin.Y; 
      translateAnim.To = target.RenderTransformOrigin.Y - target.ActualHeight; 
      translateAnim.Duration = new Duration(TimeSpan.FromMilliseconds(500)); 
      translateAnim.BeginTime = TimeSpan.FromMilliseconds(500); 

      Storyboard.SetTarget(translateAnim, target); 
      Storyboard.SetTargetProperty(translateAnim, new PropertyPath(TranslateTransform.YProperty)); 

      storyboard.Children.Add(translateAnim); 
     } 

     storyboard.Begin(); 
    } 

有些東西在調試時我已經注意到:

  1. 的RenderTransformOrigin.Y屬性始終爲0無論哪個ListBoxItem中被引用。
  2. Height屬性是NaN雖然的ActualHeight屬性是67
  3. 的ListBoxItem中的父屬性爲null

這兩件事情讓我懷疑我是不是給未呈現一個ListBoxItem的參考屏幕?但是,由於不透明度動畫完美地工作,並且我所有的列表都可見(目前只包含3個項目),所以我不明白這是怎麼回事。

我也嘗試過使用PointAnimation並直接對RenderTransformOrigin屬性進行動畫處理,但這給出了相同的結果(沒有什麼)。

任何幫助表示讚賞,謝謝!

+0

你試圖完成什麼樣的效果? – 2012-01-13 23:58:45

+0

刪除列表中的項目時,項目將淡出,並且其下的所有項目都將上移。 – 2012-01-14 00:09:50

+0

它可以在xaml中嗎?不幸的是,我只能想到如何用xaml與故事板和FluidMoveBehavior一起來提供你所追求的效果。 – 2012-01-14 00:34:55

回答