我一直在寻找解决方案,但发现没有任何效果。
问题很简单:
我尝试使用带有EventTrigger(TargetUpdated)的样式来启动Storyboard,但它有副作用,所有单元格的背景在首次填充DataGrid时以及滚动或重新排序时都会动画化。 / p>
我知道其他类似问题很少,但我没有看到有效的解决方案 有没有人能够做到这一点?我非常不希望有任何代码隐藏,但如果有必要,我会忍受它......
编辑:
我注意到对于我想要实现的目标存在一些困惑:
假设一个单元格(它是数据对象的底层属性)的值为“A”。在某些时候它变为“B”(例如从服务器更新)。此时背景应该“闪烁”(例如,从红色到透明的1秒动画)。在所有其他时间,背景应该是透明的。
答案 0 :(得分:4)
我终于在MS论坛上指出了正确的方向,解决方案是使用附加行为来注册OnTargetUpdated处理程序并启动故事板。我之前尝试过这种方法,但显然只有当单元格的IsLoaded属性为真时才必须启动Storyboard。这消除了我上面提到的副作用。
以下是forum post的链接。
答案 1 :(得分: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>
希望这有帮助!