2

我一直在寻找解决方案,但没有找到任何可行的方法。

问题很简单:

  • DataGrid(只读)绑定到对象集合(实现 INotifyPropertyChanged)
  • 当数据对象的某些属性发生变化时,单元格背景应该动画(例如,从红色到透明)

我尝试使用带有 EventTrigger (TargetUpdated) 的样式来启动 Storyboard,但它有副作用,当 DataGrid 首次填充时以及滚动或重新排序时,所有单元格的背景都是动画的。

我知道几乎没有其他类似的问题,但我没有看到有效的解决方案。
有没有人能够做到这一点?我非常希望没有任何代码隐藏,但如果有必要,我会忍受它......

编辑:
我注意到我想要实现
的目标有些混乱:假设一个单元格(它是数据对象的基础属性)的值“A”。在某些时候它变为“B”(例如从服务器更新)。此时背景应该“闪烁”(例如,从红色到透明的 1 秒动画)。在所有其他时间,背景应该是透明的。

4

2 回答 2

5

我终于在 MS 论坛上指出了正确的方向,解决方案是使用注册 OnTargetUpdated 处理程序并启动故事板的附加行为。我之前尝试过这种方法,但显然只有在单元格的 IsLoaded 属性为真时才必须启动情节提要。这消除了我上面提到的副作用。

这是论坛帖子的链接。

于 2013-01-10T09:55:51.560 回答
2

添加一个转换器是这样的:

namespace System.Converters
{
//Converter for cell animation 
  public  class flashConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string cellvalue = value.ToString();
        return cellvalue = ("place the condition here");
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return false;
    }
}

在你的 MainWindow.xaml.cs 添加命名空间

   xmlns:loc="clr-namespace:YourProjectName.Converters"  

在您的资源中添加以下内容:

          <DataGrid.Resources>
          <loc:flashConverter x:Key="SomeConverter"></loc:flashConverter>
         </DataGrid.Resources>

在您的 DatagridTextColumn 添加以下内容:

  <DataGridTextColumn Header="yourDatagridHeader"  IsReadOnly="True" Binding="{Binding Path=yourDatagridHeader}">
             <DataGridTextColumn.ElementStyle>
        <!--Style to implement the datagrid cell animation for yourDatagridcell-->
            <Style TargetType="{x:Type TextBlock}">
             <Style.Triggers>
             <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here">
            <!-#E6F85050 is the hexadecimal value for RED-->
             <Setter Property="Background" Value="#E6F85050"/>
             </DataTrigger>
             <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here">
             <Setter Property="Background" Value="give the hexadecimal value for transparent here "/>
              </DataTrigger>
           </Style.Triggers>
            </Style>
        </DataGridTextColumn.ElementStyle>
      </DataGridTextColumn>

希望这可以帮助 !

于 2013-01-07T15:47:49.537 回答