2016-10-18 17 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(); 
      } 
     } 
    } 

我怀疑我必须停止动画,但我不知道我该怎么做呢?

感谢

回答

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检查并告诉 – AnjumSKhan

+0

你很棒,没有更多的记忆成长! – advapi

0

的问题是,你每次都创建一个新的故事板,而不是项目变化重新使用现有的一个:

var sb = new Storyboard(); 

如果你真的必须这样做,那么你需要处理的情节提要完成事件并将其从小区中移除。

相关问题