XML
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
</Trigger>
<DataTrigger Binding="{Binding IsActive}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="BlinkStoryboard">
<Storyboard AutoReverse="True" RepeatBehavior="Forever">
<ColorAnimation
Storyboard.TargetProperty="(DataGridRow.Background).(SolidColorBrush.Color)"
To="#FF9999"
Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="BlinkStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
整体结构
DataTrigger(数据触发器)
├── 触发条件:IsActive == True
├── EnterActions(进入动作):启动闪烁动画
└── ExitActions(退出动作):停止闪烁动画
1. 触发条件
XML
<DataTrigger Binding="{Binding IsActive}" Value="True">
-
绑定当前行的
IsActive属性 -
当
IsActive == True时,触发进入动作 -
当
IsActive从True变回False时,触发退出动作
2. 进入动作
XML
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="BlinkStoryboard">
<Storyboard AutoReverse="True" RepeatBehavior="Forever">
<ColorAnimation
Storyboard.TargetProperty="(DataGridRow.Background).(SolidColorBrush.Color)"
To="#FF9999"
Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
| 元素 | 作用 |
|---|---|
BeginStoryboard |
启动动画的容器 |
x:Name="BlinkStoryboard" |
给这个动画命名,供 StopStoryboard 引用 |
Storyboard |
故事板,容纳多个动画 |
AutoReverse="True" |
动画自动反向播放 |
RepeatBehavior="Forever" |
无限循环 |
ColorAnimation |
颜色动画 |
TargetProperty |
目标属性路径 |
To="#FF9999" |
动画目标色(浅红) |
Duration="0:0:0.5" |
单程 0.5 秒 |
动画效果:
text
原色 ──0.5s──→ #FF9999 ──0.5s──→ 原色 ──0.5s──→ #FF9999 → ...
正向 反向 正向
因为 AutoReverse=True + RepeatBehavior=Forever,所以是来回闪烁。
3. 退出动作
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="BlinkStoryboard" />
</DataTrigger.ExitActions>
| 元素 | 作用 |
|---|---|
StopStoryboard |
停止动画 |
BeginStoryboardName |
指定要停止哪个 BeginStoryboard |
当 IsActive 变回 False 时:
-
停止
BlinkStoryboard -
背景色恢复到动画开始前的值(
Transparent)
4. TargetProperty 解析
XML
Storyboard.TargetProperty="(DataGridRow.Background).(SolidColorBrush.Color)"
拆解:
(DataGridRow.Background) → 拿到 DataGridRow 的 Background 属性
↓
它是一个 Brush
↓
(SolidColorBrush.Color) → 拿到 Brush 的 Color 属性
前提 :Background 必须是 SolidColorBrush,否则路径会失败。
5. 完整流程
IsActive = False
↓
IsActive = True
↓
EnterActions 触发
↓
BeginStoryboard 启动 BlinkStoryboard
↓
背景色:原色 → #FF9999 → 原色 → #FF9999 → ...(无限循环)
↓
IsActive = False
↓
ExitActions 触发
↓
StopStoryboard 停止 BlinkStoryboard
↓
背景色恢复