XAML - 在DataGrid的不同行上同步相同的动画

时间:2014-07-31 15:23:37

标签: c# wpf xaml animation

我使用DataGrid显示集合的一些元素:

<DataGrid Name="grdItems" ItemsSource="{Binding Path=myItemsList}" [...]

我想要的是,如果一行的特定列是&#39; 1&#39;,该行开始闪烁。我可以通过这种方式实现这种行为:

<DataGrid ... >
    <DataGrid.Resources>
        <Storyboard x:Key="rowBlink" x:Name="Blink" AutoReverse="True" RepeatBehavior="Forever" Timeline.DesiredFrameRate="40" SpeedRatio="1">
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                <EasingColorKeyFrame KeyTime="00:00:01" Value="Orange" />
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
    </DataGrid.Resources>
</DataGrid>    
<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Acked}" Value="False">
                <DataTrigger.EnterActions>
                    <BeginStoryboard x:Name="blinkStoryBoard" Storyboard="{StaticResource rowBlink}" />
                </DataTrigger.EnterActions>
            </DataTrigger>
            <DataTrigger Binding="{Binding Acked}" Value="True">
                <DataTrigger.EnterActions>
                    <StopStoryboard BeginStoryboardName="blinkStoryBoard" />
                </DataTrigger.EnterActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.CellStyle>

问题是动画与网格的每一行不同步。如果稍后添加一行,它将与其他行不同步闪烁。有没有办法同步动画?

1 个答案:

答案 0 :(得分:1)

不一定是您确切问题的解决方案,但可能是一种可以达到预期效果的解决方法:

不是让每一行都自己闪烁,也许你可以让DataGrid的背景闪烁? 不应动画的那些行可以将其BackgroundColor设置为默认颜色,并且动画行可以将其背景设置为“透明”(这样您就可以看到背景)。

可能存在一些问题,例如DataGrid的边缘在闪烁时显示BackgroundColor动画,但可能值得一试。我自己运行它,但我没有在这台机器上设置我的环境...如果我今晚有机会我会进行测试并再次在这里发布。