EventTrigger s предназначены для выполнения действий - включая анимацию - в ответ на перенаправленное событие .
Как и предполагалось мм8 , элемент управления 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));
}
}
Таким образом, вы можете создать Style
с EventTrigger
для начала анимации:
<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" />
Надеюсь, это поможет вам.