2011-03-09 8 views
5

데이터 바인딩 목록 상자의 항목을 목록 상자의 해당 위치로 "날아가는"방법과 비슷하게 어떤 방법으로 카드 한 벌을 해당 Windows에서 처리 할 때 표시되는 효과를 볼 수 있습니다 카드 게임? (저는 WPF를 사용하고 있습니다)목록 상자 항목의 WPF 애니메이션

답변

3

Panel 클래스를 확장하고 ListBox.ItemsPanel 속성의 ItemsPanelTemplate 클래스로 사용해야합니다. 정말 쉽습니다 ... 오버 라이딩 할 수있는 두 가지 방법이 있습니다. 하나는 ListBox의 항목을 측정하고 하나는 항목을 정렬합니다. 주제에 대한 소프트웨어는 article입니다.

여기에 항목을 애니메이션하는 방법을 보여주는 more useful article [불행히도, 더 이상 사용할 수 없음] 일 수 있습니다. 효과를 얻으려면 위치 애니메이션의 시작 값을 각 항목의 가시 영역 바로 위와 동일한 위치로 설정하면됩니다. 예를 들어 시작 위치가 0, finalSize.Height 인 경우 각 항목은 ListBox의 왼쪽 하단 모서리에서 해당 위치로 밀려납니다. 새 애니메이션 Panel을 다음과 같이 사용할 수 있습니다.

<ListBox> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <YourXmlNamespace:YourAnimatedPanel AnyCustomProperty="value" /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

쉐리 던! 나는 "유용한 기사"링크를 그대로 사용했고, 내가 염두에 두었던 효과를 제공했다. –

+0

이 점을 알게 된 다른 사용자들이 염두에 두어야 할 점은 ... 목록 상자에 몇 백 개의 항목이 있고 창 테두리를 드래그하여 화면의 크기를 조정할 때 애니메이션이 오히려 dogslow가된다는 것을 알았습니다. 목록 상자를로드 할 때 애니메이션은 여전히 ​​훌륭합니다. (그리고 그것이 제가 원했던 것입니다.) 그것은 GUI를 stu-stu-stutter로 바꾸는 화면의 크기 조정 일뿐입니다! 하지만 내 시나리오는 사용자가 화면의 크기를 지속적으로 조정하지 않기 때문에 걱정하지 않아도됩니다. –

+0

새로 추가 한 항목에 애니메이션을 적용 할 수 있으므로 사용자가 '창'의 크기를 조정하면 항목이 새 위치로 '점프'됩니다 ... 멋지게 보이지는 않지만 더듬 거리면 안됩니다 업데이트 할 때. 이렇게하고 싶다면 커스텀'Panel'에'UIElement' 타입의'private list'를 추가하면됩니다. 'ArrangeOverride' 메소드의 끝에서'List'를 지운 다음'Panel.Children' 속성의 각 자식을 그 안에 추가하십시오. 다음에 메소드가 호출 될 때,이'List'는 이전에'Panel'에 있던 자식들을 포함 할 것입니다. 그런 다음'List'에 포함되지 않은 항목을 애니메이션으로 만듭니다. – Sheridan