2016-10-18 11 views
0

データソース内の値が更新され、正常に動作しているときにセルが点滅するWPFアプリケーションがあります。プログラムで宣言されたストーリーボードを正しく停止する方法

私は本当に速く更新を実行すると、メモリが増加しているアプリケーションをプロファイリングして気づいた。私は

private static DoubleAnimation blink = 
     new DoubleAnimation() 
     { 
      From = 0, 
      To = 1, 
      Duration = TimeSpan.FromSeconds(0.2), 
      FillBehavior = FillBehavior.Stop 
     }; 
private void Items_ItemChanged(object sender, ItemChangedEventArgs<ExpandoObject> e) 
    { 
     var club = e.Item; 
     var row = grid.ItemContainerGenerator.ContainerFromItem(club) as Telerik.Windows.Controls.GridView.GridViewRow; 
     if (row != null) 
     { 
      var column = grid.Columns[e.PropertyName]; 
      var cell = row.Cells.FirstOrDefault(c => c.Column == column); 
      if (cell != null) //In case of virtualization I won't have all the columns 
      { 
       Storyboard.SetTarget(blink, cell.Content as TextBlock); 
       Storyboard.SetTargetProperty(blink, new PropertyPath(Button.OpacityProperty)); 
       var sb = new Storyboard(); 
       sb.Children.Add(blink); 
       sb.Begin(); 
      } 
     } 
    } 

このようにストーリーボードを開始しますので、私はアニメーションを停止するようにしましたが、私は、私はそれを行うには」VEの方法がわからない疑いがありますか?

おかげ

答えて

1

Items_ItemChangedからStoryboardを取り出します。

Storyboard sb = new Storyboard(); 
    private void Items_ItemChanged(object sender, ItemChangedEventArgs<ExpandoObject> e) 
    { 
     sb.Stop(); 
     sb.Children.Clear(); 

     sb.Children.Add(blink); 

     var club = e.Item; 
     var row = grid.ItemContainerGenerator.ContainerFromItem(club) as Telerik.Windows.Controls.GridView.GridViewRow; 
     if (row != null) 
     { 
      var column = grid.Columns[e.PropertyName]; 
      var cell = row.Cells.FirstOrDefault(c => c.Column == column); 
      if (cell != null) //In case of virtualization I won't have all the columns 
      { 
       Storyboard.SetTarget(blink, cell.Content as TextBlock); 
       Storyboard.SetTargetProperty(blink, new PropertyPath(Button.OpacityProperty)); 

       sb.Begin(); 
      } 
     } 
    } 
+0

このように私は何とかそれをやめることができますか、それはちょうどいいですか? – advapi

+0

@advapi check and tell – AnjumSKhan

+0

あなたはもう記憶がなくても大丈夫です! – advapi

0

問題は、たびにアイテムの変更を新しいストーリーボードを作成するのではなく、既存のものを再利用しているということです。

var sb = new Storyboard(); 

あなたが本当にこれを行う必要がある場合、あなたは終了ストーリーボードを処理する必要がありますセルから削除します。

関連する問題