动画单元格时对DataGrid进行排序会导致异常

时间:2010-12-01 03:47:25

标签: .net wpf

我创建了一个DataGridCell模板,我已将其应用于我的一个列,如下所示:

<DataGridTextColumn Binding="{Binding LastUpdated}" 
    IsReadOnly="True" CanUserReorder="False" 
    CanUserSort="False" CanUserResize="False"
    CellStyle="{StaticResource DataGridCellStyle1}" 
 />

模板看起来像这样:

<ControlTemplate TargetType="{x:Type DataGridCell}">
   <ControlTemplate.Resources>
      <Storyboard x:Key="CellChangedStoryboard">
          <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="DGC_Border">
                <EasingColorKeyFrame KeyTime="0" Value="LightGreen"/>
                <EasingColorKeyFrame KeyTime="0:0:8" Value="Red"/>
            </ColorAnimationUsingKeyFrames>
      </Storyboard>
  </ControlTemplate.Resources>
   <Border x:Name="DGC_Border" Background="Red">
       <ContentPresenter />
         <i:Interaction.Triggers>
               <ei:TimerTrigger MillisecondsPerTick="1000" >
                     <ei:ControlStoryboardAction Storyboard="{StaticResource CellChangedStoryboard}"/>
               </ei:TimerTrigger>
         </i:Interaction.Triggers>
     </Border>
</ControlTemplate>

在这个例子中,我使用Blend TimerTrigger触发动画,但是无论我如何触发动画,一旦我尝试对DataGrid进行排序(通过单击其中一个列标题),它总会崩溃

如果我删除了故事板,那么它就不会在排序时崩溃。

异常是 InvalidOperationException:在'System.Windows.Controls.Border'的名称范围内找不到'DGC_Border'名称。

我怀疑当DataGrid对其进行排序时会破坏或以其他方式混乱单元格/列,并且正在运行的动画无法再找到动画的单元格。

为什么会发生异常,如何阻止它? 感谢

更新:似乎工作正常如果我使用<ControlTemplate.Triggers>来触发StoryBoard。不幸的是,这不是解决方案,因为当绑定属性发生变化时我需要播放故事板。

1 个答案:

答案 0 :(得分:0)

我能想出的最好的方法是放弃Blend触发器并使用它:

<Border x:Name="DGC_Border" Background="Red">
                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                          Content="{Binding LastUpdated, NotifyOnTargetUpdated=True}">
                            <ContentPresenter.Triggers>
                                <EventTrigger RoutedEvent="Binding.TargetUpdated">
                                    <BeginStoryboard Storyboard="{StaticResource RowChangedStoryboard}" />
                                </EventTrigger>
                            </ContentPresenter.Triggers>
                        </ContentPresenter>
                    </Border>

我注意到在网格排序之后所有的动画都被移除了,这对我来说不是正确的行为 - 我希望动画从他们中断的地方继续,但是我必须将它保存到另一天。