2012-01-13 4 views
2

У меня возникли проблемы с анимацией элементов в моем ListBox. Анимации на 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. Свойство Высота NaN, хотя свойство ActualHeight 67
  3. Родитель свойство ListBoxItem равно нулю

Эти две вещи заставляют меня задаться вопросом, если я дал ссылку на ListBoxItem, не оказанной экрана? Но поскольку анимация Opacity работает отлично, и весь мой список видимый (на данный момент содержит только 3 объекта), я не вижу, как это может быть.

Я также попытался использовать PointAnimation и анимировать свойство RenderTransformOrigin, но это дало тот же результат (ничего, что есть).

Любая помощь приветствуется, спасибо!

+0

Какое влияние вы пытаетесь достичь? –

+0

При удалении элемента в списке этот элемент будет исчезать, и все предметы под ним будут скользить вверх. –

+0

Может ли это быть в xaml? К сожалению, я могу только подумать о том, как это сделать с помощью xaml с раскадрой и FluidMoveBehavior, чтобы обеспечить эффект, который вам нужен. –

ответ

1

Пожалуйста, проверьте эту ссылку:

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

Кто-то создал класс, который вы можете легко включить в ваше приложение. У этого есть анимация для добавления/удаления элементов из вашего списка.

Это должно сэкономить вам много времени и разочарований.

Смежные вопросы