如何为ListBoxItem位置设置动画

时间:2012-01-13 23:46:44

标签: silverlight windows-phone-7 listbox storyboard

我在使用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();
    }

调试时我注意到的一些事情:

  1. 无论引用哪个ListBoxItem,RenderTransformOrigin.Y属性始终为0。
  2. 虽然ActualHeight属性为67
  3. ,但高度属性为NaN
  4. ListBoxItem的父属性为null
  5. 这两件事让我想知道我是否被引用了一个未呈现屏幕的ListBoxItem?但是,由于Opacity动画效果很好并且我的所有列表都可见(目前只包含3个项目),我看不出这是怎么回事。

    我也尝试过使用PointAnimation并直接设置RenderTransformOrigin属性,但这会产生相同的结果(没有任何结果)。

    感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

请查看此链接:

http://blogs.msdn.com/b/jasongin/archive/2011/01/03/wp7-reorderlistbox-improvements-rearrange-animations-and-more.aspx

有人创建了一个可以轻松整合到您的应用中的课程。这个动画可以添加/删除列表中的项目。

这可以为您节省大量时间和挫折。