2017-02-22 116 views
3

我已經在windows 10下編寫了一個windows通用應用程序,它具有ListView將顏色轉換添加到新添加的Listview項目

這個ListView如果新數據可用,每五秒更新一次。它的數據源是ObservableCollection,最多隻能顯示10個項目,最新插入到集合的前面。這似乎很有效,因爲您看到ListView項目緩慢地向下滾動屏幕。

我想要做的是向ListView中的新項目添加某種顏色過渡,以便當它們出現時,該項目的背景從灰色開始並淡入到白色。我想要這種效果,以便用戶可以輕鬆看到剛出現在ListView中的新項目或項目。

添加到集合中的新對象有一個標誌設置爲表示它們是新的。如果動畫過程能夠在動畫之後重置此標誌,我認爲這可以用作指示符?或者我應該使用ListView以外的事件,如果有的話?

我是新來的故事板,所以我不知道最好的辦法。任何人都可以就我應該研究的領域提供建議,甚至可以在UWP下進行研究?

回答

3

基本上,無論何時添加新項目,您都希望將其顏色設置爲淺灰色,然後將其右後移動。

因此,關鍵是要找到在項目容器創建期間調用的事件。在這種情況下,ContainerContentChanging是你的朋友。

由於在動畫過程中需要動畫幾次,所以需要ColorAnimationUsingKeyFrames而不是普通的ColorAnimation。整個TimelineStoryboard語法有時會有點混亂,所以我在這裏爲你創建了一個簡單的演示。希望能幫助到你。 :)

private void OnListViewContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) 
{ 
    if (args.ItemContainer != null && !args.InRecycleQueue && args.Phase == 0) 
    { 
     var colorAnimation = new ColorAnimationUsingKeyFrames 
     { 
      // 'cause the new item comes in with an animation of which duration is about 300s, we add a little delay here to only 
      // animate the color after it appears. 
      BeginTime = TimeSpan.FromMilliseconds(300) 
     }; 
     var keyFrame1 = new LinearColorKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0)), Value = Colors.White }; 
     var keyFrame2 = new LinearColorKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(400)), Value = Colors.LightGray }; 
     var keyFrame3 = new LinearColorKeyFrame { KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(1200)), Value = Colors.White }; 
     colorAnimation.KeyFrames.Add(keyFrame1); 
     colorAnimation.KeyFrames.Add(keyFrame2); 
     colorAnimation.KeyFrames.Add(keyFrame3); 

     Storyboard.SetTarget(colorAnimation, args.ItemContainer); 
     Storyboard.SetTargetProperty(colorAnimation, "(Control.Background).(SolidColorBrush.Color)"); 

     var storyboard = new Storyboard(); 
     storyboard.Children.Add(colorAnimation); 
     storyboard.Begin(); 
    } 
} 

下面是它在demo應用程序中的外觀。

enter image description here

+1

這正是我所需要的。在這方面多讀點時間,以便我能更好地理解。 –