EventTriggers 用于执行动作 - 包括动画 - 以响应 routed event。
正如mm8 建议的那样,Label 控件没有“ContentChanged”事件。但是您可以实现路由事件,而不是使用普通事件:
public class CustomLabel : Label
{
public static readonly RoutedEvent ContentChangedEvent = EventManager.RegisterRoutedEvent(
"ContentChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CustomLabel));
public event RoutedEventHandler ContentChanged
{
add
{
AddHandler(ContentChangedEvent, value);
}
remove
{
RemoveHandler(ContentChangedEvent, value);
}
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
RaiseEvent(new RoutedEventArgs(ContentChangedEvent));
}
}
通过这种方式,您可以创建一个带有EventTrigger 的Style 来开始动画:
<Style x:Key="ContentChangedAnimated" TargetType="{x:Type local:CustomLabel}"
BasedOn="{StaticResource {x:Type Label}}">
<Style.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="FontSize"
To="28" AutoReverse="True" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
然后您需要将该样式应用于您的(自定义)标签:
<local:CustomLabel x:Name="c00" Content="{Binding BestIndividual[0]}" Margin="0" Style="{StaticResource ContentChangedAnimated}"
BorderThickness="2,2,0,0" BorderBrush="Black" />
希望对你有帮助。