Sat*_*ala 2 wpf animation datagrid
我有一个从数据库填充的WPF DataGrid.有一个细胞给我一个计数.如果它的值大于0,我想为该单元格添加闪烁的背景颜色.感谢您帮助解决我的问题.
kev*_*v22 12
创建一个转换器,检查单元格是否包含大于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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在xaml中包含转换器命名空间.替换MyApp为转换器的命名空间:
xmlns:myApp="clr-namespace:MyApp"
Run Code Online (Sandbox Code Playgroud)
您的网格必须看起来像这样.我绑定的对象有2个属性: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>
Run Code Online (Sandbox Code Playgroud)
如果必须根据它们包含的内容使多个列中的单元格闪烁,则可以更改
<DataTrigger
Binding="{Binding Col1,
Converter={StaticResource GreaterThanZeroConverter}}"
Value="True" >
...
Run Code Online (Sandbox Code Playgroud)
至
<DataTrigger
Binding="{Binding
Content.Text,
RelativeSource={RelativeSource Self},
Converter={StaticResource GreaterThanZeroConverter}}"
Value="True" >
Run Code Online (Sandbox Code Playgroud)
并为要闪烁到FlashStyle的每个列设置CellStyle:
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Col1}"
CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
<DataGridTextColumn
Binding="{Binding Col2}"
CellStyle="{StaticResource FlashStyle}"></DataGridTextColumn>
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
请注意,这可能只适用于DataGridTextColumns.如果您正在使用DataGridTemplateColumns,那将会更棘手.