我在使用ListBox中的项目时遇到了一些麻烦。 OpacityProperty上的动画效果很好但是当我尝试动画我的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();
}
调试时我注意到的一些事情:
这两件事让我想知道我是否被引用了一个未呈现屏幕的ListBoxItem?但是,由于Opacity动画效果很好并且我的所有列表都可见(目前只包含3个项目),我看不出这是怎么回事。
我也尝试过使用PointAnimation并直接设置RenderTransformOrigin属性,但这会产生相同的结果(没有任何结果)。
感谢任何帮助,谢谢!
答案 0 :(得分:1)
请查看此链接:
有人创建了一个可以轻松整合到您的应用中的课程。这个动画可以添加/删除列表中的项目。
这可以为您节省大量时间和挫折。