Wpf 如果满足特定数据条件,如何设置DataGrid单元格背景动画?

Wpf 如果满足特定数据条件,如何设置DataGrid单元格背景动画?,wpf,animation,datagrid,Wpf,Animation,Datagrid,我有一个从数据库填充的WPF数据网格。有一个单元格可以给我计数。如果单元格的值大于0,我想为其添加闪烁的背景色。感谢您帮助我解决问题。创建一个转换器,用于检查单元格中是否包含大于0的数字: namespace MyApp { public class GreaterThanZeroConverter : IValueConverter { public object Convert(object value, Type targetType,

我有一个从数据库填充的WPF数据网格。有一个单元格可以给我计数。如果单元格的值大于0,我想为其添加闪烁的背景色。感谢您帮助我解决问题。

创建一个转换器,用于检查单元格中是否包含大于0的数字:

namespace MyApp
{
    public class GreaterThanZeroConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            int cellValue;
            return Int32.TryParse((string)value, out cellValue) && cellValue > 0;
        }

        public object ConvertBack(object value, Type targetType,
            object parameter, CultureInfo culture)
        {
            return false;
        }
    }
}
在xaml中包含转换器名称空间。将
MyApp
替换为转换器的命名空间:

xmlns:myApp="clr-namespace:MyApp"
你的网格必须看起来像这样。我绑定到的对象有两个属性:Col1和Col2。如果Col1的值大于0,则该单元格将闪烁红色

<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="False">
    <DataGrid.Resources>
        <myApp:GreaterThanZeroConverter 
            x:Key="GreaterThanZeroConverter">
        </myApp:GreaterThanZeroConverter>
        <Style TargetType="DataGridCell" x:Key="FlashStyle">
            <Style.Triggers>
                <DataTrigger 
                    Binding="{Binding Col1, 
                    Converter={StaticResource GreaterThanZeroConverter}}" 
                    Value="True" >
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard 
                                x:Name="Blink" 
                                AutoReverse="True" 
                                RepeatBehavior="Forever">
                                <ColorAnimationUsingKeyFrames 
                                    BeginTime="00:00:00"
                                    Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                                    <EasingColorKeyFrame 
                                        KeyTime="00:00:01" 
                                        Value="Red" />
                                </ColorAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn 
            Binding="{Binding Col1}" 
            CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
        <DataGridTextColumn 
            Binding="{Binding Col2}"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

编辑 如果必须使多列中的单元格根据其包含的内容闪烁,则可以更改

<DataTrigger 
    Binding="{Binding Col1, 
    Converter={StaticResource GreaterThanZeroConverter}}" 
    Value="True" >
  ...

...


并将要闪烁的每列的CellStyle设置为我们的FlashStyle:

<DataGrid.Columns>
    <DataGridTextColumn 
        Binding="{Binding Col1}" 
        CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
    <DataGridTextColumn 
        Binding="{Binding Col2}"
        CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
</DataGrid.Columns>


注意,这可能只适用于DataGridTextColumns。如果您使用的是DataGridTemplateColumns,则会有点棘手。

如果我想对多个列使用相同的格式,该怎么办?如果我将其应用于多个列,则会出现运行时错误。“不能重复闪烁”,这取决于。如果每个单元格包含大于0的值,是否希望其闪烁?或者您总是在一列中查找值,而只是让其他列中的单元格闪烁?我希望每个单元格在包含值>0时闪烁。可以这样做吗?我将在4个不同的列中查找值,并希望它们在任何值>0时闪烁。我只使用DataGrid列。我将尝试一下,并告诉您它在我的场景中是如何工作的。
<DataGrid.Columns>
    <DataGridTextColumn 
        Binding="{Binding Col1}" 
        CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
    <DataGridTextColumn 
        Binding="{Binding Col2}"
        CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
</DataGrid.Columns>