2009-08-22 69 views
7

我想在ListView中的某個項目改變位置時有一個動畫,所以它會慢慢移動到新的位置。無論是在模板還是在代碼中。 我嘗試從(虛擬化)StackPanel降序並重寫ArrangeOverride來重新定位和動畫項目。問題是我不知道該項目在更新之前在什麼位置,所以我可以很好地轉換到新的位置。我試着檢查該項目的TranslateTransform,存儲在字典中,覆蓋OnItemChanged並存儲OldPosition/Position ..但沒有任何工作,因爲它似乎總是重新創建項目(從模板)。(WPF)動畫ListView項移動

任何其他建議?

+0

也許這篇文章由馬蒂亞斯·夏皮羅將幫助:如何在WPF中創建一個動畫ScrollViewer(或ListBox)](http://www.designersilverlight.com/2009/05/06/how-to-create-an-animated-scrollviewer-or-listbox-in-wpf/) – Ray 2009-09-08 21:25:29

回答

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 2009-09-08 21:27:57

+0

有限的類文檔可以在Expression Blend SDK用戶指南中找到,它與Blend 3 – rravuri 2009-09-09 06:19:28

+0

一起安裝,謝謝你的所有答案..這種方法的行爲看起來不錯,但問題是所有的項目都重新創建,因此都是動畫(從頂部)。同樣的問題適用於所有其他解決方案 我會考慮使用DataGrid,因爲它似乎還有其他一些我想要的內容。 – 2009-09-09 11:37:01

1

事實上,這一起安裝在Microsoft.Expression.Interactions.dll這種行爲Dan Crevier在2006年完全解決了問題。查看他的PanelLayoutAnimator課程。

+0

+1之前,可能總是等待列表填充後。我只是檢查了這篇文章 - 它涉及單個類,代碼示例很容易理解,使用它只涉及向您的XAML添加單個屬性,並且結果看起來不錯。推薦的。 – 2009-10-08 12:37:42

0

@rravuri答案爲我工作,你必須定義,你可以直接申請一個動態的資源,然後把它likethis ItemsPanel =「{DynamicResource ItemsPanelTemplate}」