某些条件为True时,在WPF中为数据网格的单元格设置动画效果?

时间:2012-12-07 10:54:01

标签: c# wpf xaml wpfdatagrid

我目前正在处理datagrid-WPF,它正在显示数据库中的表。 该表将有关学生结果的信息显示为PASS AND FAIL。 现在我想将datagrid-cell上的单元格设置为动画 当它是失败时为绿色,当失败时为红色。

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

3 个答案:

答案 0 :(得分:2)

您可以使用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进行绑定的一种方式。

我希望有所帮助。

最佳。

答案 1 :(得分:1)

使用样式和转换器

 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>

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

将样式添加到datagrid列

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

答案 2 :(得分:1)

此链接对于datagrid中的单元格动画非常有用。 在这个链接中,有更明确的解释......

How do I change the background color of a cell using WPF Toolkit Datagrid