내 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 속성에 상관없이 ListBoxItem의이 참조되는 항상 0입니다 여기에 내가 사용하고있는 코드입니다. 의 ActualHeight 속성은 ListBoxItem의의 부모의 속성이 null 67
- 비록
- 높이 속성이 NaN의
이 두 가지 내가 렌더링되지 않은 ListBoxItem의에 대한 참조를 받았을 경우에는 나를 궁금하게 화면의? 하지만 불투명도 애니메이션이 완벽하게 작동하고 모든 목록이 표시되기 때문에 (현재 3 개 항목 만 포함) 나는 이것이 어떻게 될 수 있는지 보지 못합니다.
나는 또한 PointAnimation을 사용하고 RenderTransformOrigin 속성을 직접 애니메이션으로 만들려고했으나 동일한 결과가 나타났습니다.
도움 주시면 감사하겠습니다.
달성하려는 효과는 무엇입니까? –
목록에서 항목을 삭제할 때 해당 항목이 희미 해지고 그 아래의 모든 항목이 위로 이동합니다. –
xaml에있을 수 있습니까? 불행히도 저는 Xaml로 스토리 보드와 FluidMoveBehavior를 사용하여 어떻게하면 효과가 있는지 생각할 수 있습니다. –