我使用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>
问题是动画与网格的每一行不同步。如果稍后添加一行,它将与其他行不同步闪烁。有没有办法同步动画?
答案 0 :(得分:1)
不一定是您确切问题的解决方案,但可能是一种可以达到预期效果的解决方法:
不是让每一行都自己闪烁,也许你可以让DataGrid的背景闪烁? 不应动画的那些行可以将其BackgroundColor设置为默认颜色,并且动画行可以将其背景设置为“透明”(这样您就可以看到背景)。
可能存在一些问题,例如DataGrid的边缘在闪烁时显示BackgroundColor动画,但可能值得一试。我自己运行它,但我没有在这台机器上设置我的环境...如果我今晚有机会我会进行测试并再次在这里发布。