2011-03-09 88 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

謝謝謝里登!我使用了「更有用的文章」鏈接,它提供了我想到的效果。 – 2011-03-10 02:08:20

+0

只是要記住其他用戶誰遇到這個......我已經注意到,雖然當列表框包含幾百個項目,我調整屏幕大小(通過拖動窗口邊框),但動畫獲取相當dogslow。雖然加載列表框時動畫仍然很好(這正是我想要的) - 這只是屏幕的大小調整,導致我的圖形用戶界面(stu-stu-stutter)!但由於我的場景不涉及用戶不斷調整屏幕大小,我不擔心這一點。 – 2011-03-10 02:12:25

+0

您可以將動畫應用於新添加的項目,因此當用戶調整「窗口」大小時,項目將跳轉到新的位置......它看起來不太好,但它不應該結結實實更新時。如果你真的想這樣做,只需在自定義的Panel中添加一個'UIElement'類型的'Private List'。在'ArrangeOverride'方法的末尾,清除你的'List',然後將'Panel.Children'屬性中的每個孩子添加到它中。下一次該方法被調用時,這個'List'將包含之前在'Panel'中的子元素。然後動畫不包含在「List」中的項目。 – Sheridan 2011-03-10 21:22:29