C# 当某些条件为真时,在WPF中设置datagrid单元格的动画?

C# 当某些条件为真时,在WPF中设置datagrid单元格的动画?,c#,wpf,xaml,wpfdatagrid,C#,Wpf,Xaml,Wpfdatagrid,我目前正在开发datagrid WPF,它显示数据库中的一个表。 该表将学生成绩的信息显示为及格和不及格。 现在,我想将datagrid单元格上的单元格设置为动画 通过时为绿色,失败时为红色 如何在c#和XAML中实现这一点? 谢谢。使用样式和转换器 public class SomeConverter: IValueConverter { public object Convert(object value, Type targetType, object param

我目前正在开发datagrid WPF,它显示数据库中的一个表。 该表将学生成绩的信息显示为及格和不及格。 现在,我想将datagrid单元格上的单元格设置为动画 通过时为绿色,失败时为红色

如何在c#和XAML中实现这一点?
谢谢。

使用样式和转换器

 public class SomeConverter: IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        string cellValue = value.ToString();
        return cellValue == "PASS";
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return false;
    }
}

<DataGrid ItemsSource="{Binding List}" AutoGenerateColumns="False">
<DataGrid.Resources>
    <myApp:SomeConverter
        x:Key="SomeConverter">
    </myApp:SomeConverter>
    <Style TargetType="DataGridCell" x:Key="FlashStyle">
        <Style.Triggers>
            <DataTrigger 
                Binding="{Binding Col1, 
                Converter={StaticResource SomeConverter}}" 
                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="Green" />
                            </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>
公共类SomeConverter:IValueConverter
{
公共对象转换(对象值,类型targetType,
对象参数,CultureInfo(区域性)
{
字符串cellValue=value.ToString();
返回cellValue==“通过”;
}
公共对象转换回(对象值,类型targetType,
对象参数,CultureInfo(区域性)
{
返回false;
}
}

并在xaml中包含value=false的第二个数据触发器,并触发红色

并将样式添加到datagrid列中

<DataGrid.Columns>
<DataGridTextColumn 
    Binding="{Binding SomeCol}" 
    CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
<DataGridTextColumn 
    Binding="{Binding AnotherCol}"
    CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>


您可以使用诸如
DataGridTemplateColumn
之类的内容

下面是一个例子

<DataGridTemplateColumn CellStyle="{StaticResource CenterAlignCell}" Header="Result" IsReadOnly="True" Width="*" Visibility="Visible" CanUserResize="True" SortMemberPath="GAIN_AT_POSITION" CanUserSort="True">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Background="{Binding GainHighlight}">
                                <TextBlock Text="{Binding GAIN_AT_POSITION, StringFormat=N2}" Foreground="{Binding GainForeGround}"/>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

ps:
GainHighlight
是类中绑定UI的一个属性

我希望你能有所帮助


最好。

谢谢。我有一个问题,包括CultureInfo culture,我的智能感知只接受CultureInfo和GuageTagConverter文化。这就产生了一个问题。我已经包括System.Globalization.CultureInfo。但我仍然面临着这个问题。我不确定你的意思-请你能更具体地说明这个问题吗?如果是智能感知问题,请执行以下操作删除此文件夹中的文件:%AppData%\Roaming\Microsoft\VisualStudio\10.0\ReflectedSchemas vs2010%AppData%\Roaming\Microsoft\VisualStudio\11.0\ReflectedSchemas vs2012I这里有一个问题,它说找不到myApp类型,缺少引用或命名空间。好的,您为转换器编写的类的命名空间是什么?您只需将myNameSpace、ConverterClassName和任何您想调用的内容替换为本地应用程序中的任何内容即可。。我想我应该在这件事上多投几票;-)