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