У меня возникли проблемы с анимацией элементов в моем 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();
}
Некоторые вещи, которые я заметил при отладке:
- Свойство RenderTransformOrigin.Y всегда равно 0 независимо от того, на какой объект ListBoxItem имеется ссылка.
- Свойство Height имеет значение NaN, а свойство ActualHeight - 67
- Родительское свойство ListBoxItem имеет значение null
Эти две вещи заставляют меня задаться вопросом, дается ли мне ссылка на ListBoxItem, который не отображается на экране? Но поскольку анимация Opacity работает отлично, и весь мой список виден (на данный момент содержит только 3 элемента), я не понимаю, как это могло быть.
Я также пытался использовать PointAnimation и анимировать свойство RenderTransformOrigin напрямую, но это дало тот же результат (ничего такого).
Любая помощь приветствуется, спасибо!