【发布时间】:2010-12-13 08:35:02
【问题描述】:
注意我已经提出了相关问题(答案已被接受):How to combine DataTrigger and Trigger?
我认为我需要结合 EventTrigger 和 DataTrigger 来实现我所追求的:
- 当一个项目出现在我的 ListBox 中时,它应该会闪烁片刻
- 如果项目为“关键”,则应保持突出显示
目前我有一个如下所示的 DataTemplate:
<DataTemplate DataType="{x:Type Notifications:NotificationViewModel}">
<Grid HorizontalAlignment="Stretch">
<Border Name="Background" CornerRadius="8" Background="#80c0c0c0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<Border Name="Highlight" CornerRadius="8" Background="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<!-- snip actual visual stuff -->
<Grid.Triggers>
<EventTrigger RoutedEvent="Grid.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation x:Name="LoadedAnimation"
Storyboard.TargetName="Highlight"
Storyboard.TargetProperty="Opacity"
From="0" To="1"
RepeatBehavior="5x"
Duration="0:00:0.2"
AutoReverse="True" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Grid.Triggers>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsCritical}" Value="True">
<Setter TargetName="LoadedAnimation" Property="RepeatBehavior" Value="5.5x" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
这个想法是,EventTrigger 将 Highlight 边框的不透明度设置为 0 和 1 之间的动画,并在项目首次加载时重复返回,从而吸引用户的注意力。 DataTrigger 确定动画的次数。如果视图模型报告项目 IsCritical 则动画发生 5.5 次(以不透明度 1 结束),否则发生 5 次(以不透明度 0 结束。)
但是上面的 XAML 不起作用,因为 DataTrigger 的设置器失败:
在 VisualTree 中找不到名为“LoadedAnimation”的子项。
很公平。那么,对于使用自定义值转换器或将动画计数放在视图模型上并绑定到它,我的选择是什么?
【问题讨论】:
标签: .net wpf xaml triggers datatrigger