2009-08-22 7 views
7

ListView의 항목이 위치를 변경하면 애니메이션이 생성되어 천천히 새 위치로 이동합니다. 템플릿 또는 코드에서. (가상화) StackPanel에서 내림차순으로 시도하고 ArrangeOverride를 재정 의하여 항목의 위치를 ​​변경하고 애니메이션을 적용했습니다. 문제는 내가 아이템을 '이전에'어떤 위치에 놓았는지 모르므로 새로운 위치로 올바르게 전환 할 수 있다는 것입니다. 나는 항목의 TranslateTransform을 검사하여 사전에 저장하고 OnItemChanged를 덮어 쓰고 OldPosition/Position을 저장하려고 시도했다. 그러나 항목이 항상 템플릿에서 다시 만들어 졌기 때문에 아무 것도 작동하지 않는다.(WPF) Animate ListView 항목 이동

다른 제안 사항이 있으십니까?

+0

어쩌면 마티아스 샤피로이 문서가 도움이 작동 WPF에서 애니메이션 된 ScrollViewer (또는 ListBox) 만들기] (http://www.designersilverlight.com/2009/05/06/how-to-create-an-animated-scrollviewer-or-listbox-in-wpf/) – Ray

답변

7

사용 FluidMoveBehavior 행동, 당신이 삶 훨씬 쉽게 만들 것입니다 조쉬 스미스의 기사를 살펴 가질 수있는 실현 .

당신은 다음과 같은 방식으로 어떤 ItemsControl에에

<ItemsPanelTemplate x:Key="ItemsPanelTemplate"> 
      <WrapPanel> 
       <i:Interaction.Behaviors> 
        <il:FluidMoveBehavior AppliesTo="Children" Duration="00:00:00.75"/> 
       </i:Interaction.Behaviors> 
      </WrapPanel> 
</ItemsPanelTemplate> 

는 사실이 조화 3

+0

FluidMoveBehavior의 문서에 대한 링크가 있습니까? 나는 아무것도 찾을 수없는 것 같습니다. – Ray

+0

Expression Blend SDK의 제한된 클래스 설명서는 Blend 3 – rravuri

+0

과 함께 설치된 모든 답변에 사용됩니다.이 메서드는 비헤이비어가 좋지만 문제는 모든 항목이 다시 만들어지고 따라서 모두 애니메이션으로 처리된다는 것입니다. 위치에서 (상단에서). 다른 모든 솔루션에도 동일한 문제가 적용됩니다. DataGrid 대신에 내가 좋아할만한 몇 가지 사항이있는 것처럼 보일 것입니다. –

1

와 함께 설치되는 Microsoft.Expression.Interactions.dll에서이 동작을 찾을 수 있습니다 이것을 적용 할 수 있습니다 문제는 2006 년 Dan Crevier에 의해 완벽하게 해결되었습니다. PanelLayoutAnimator 클래스를 확인하십시오. [방법 :

+0

+1에 연결되기 전에 항상 목록이 채워질 때까지 기다릴 수 있습니다. 방금이 기사를 살펴 보았습니다. 단일 클래스가 포함되어 있으며 코드 샘플은 이해하기 쉽고 XAML에 단일 특성을 추가하면 결과가 좋을뿐입니다. 권장 사항. –

0

@rravuri 대답은 당신이 직접 적용 할 수있는 동적 자원으로 정의하고 ItemsPanel = likethis를 호출해야합니다, 저를 위해 "{DynamicResource ItemsPanelTemplate}"