我在動畫列表框中的項目時遇到了一些麻煩。 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();
}
有些東西在調試時我已經注意到:
- 的RenderTransformOrigin.Y屬性始終爲0無論哪個ListBoxItem中被引用。
- Height屬性是NaN雖然的ActualHeight屬性是67
- 的ListBoxItem中的父屬性爲null
這兩件事情讓我懷疑我是不是給未呈現一個ListBoxItem的參考屏幕?但是,由於不透明度動畫完美地工作,並且我所有的列表都可見(目前只包含3個項目),所以我不明白這是怎麼回事。
我也嘗試過使用PointAnimation並直接對RenderTransformOrigin屬性進行動畫處理,但這給出了相同的結果(沒有什麼)。
任何幫助表示讚賞,謝謝!
你試圖完成什麼樣的效果? – 2012-01-13 23:58:45
刪除列表中的項目時,項目將淡出,並且其下的所有項目都將上移。 – 2012-01-14 00:09:50
它可以在xaml中嗎?不幸的是,我只能想到如何用xaml與故事板和FluidMoveBehavior一起來提供你所追求的效果。 – 2012-01-14 00:34:55