NOTE J'ai posé la question connexe (avec une réponse acceptée): How to combine DataTrigger and Trigger?Comment combiner DataTrigger et EventTrigger?
Je pense que je dois combiner une EventTrigger
et un DataTrigger
pour obtenir ce que je suis après:
- quand un article apparaît dans ma ListBox, il devrait clignoter quelques instants
- si l'article est 'Critique' alors il devrait rester en surbrillance
Actuellement, j'ai un DataTemplate qui ressemble à ceci:
<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>
L'idée est qu'un EventTrigger anime l'opacité de la frontière Highlight
entre 0 et 1 et à nouveau à plusieurs reprises lorsque l'élément est d'abord chargé, en tirant la l'attention de l'utilisateur. Le DataTrigger
détermine le nombre de fois à animer. Si le modèle de vue signale que l'élément IsCritical
alors l'animation se produit 5,5 fois (de sorte qu'il se termine à l'opacité 1), sinon il se produit 5 fois (se terminant à l'opacité 0.)
Cependant le XAML ci-dessus ne fonctionne pas parce que le setter de DataTrigger échoue avec:
Enfant avec le nom 'LoadedAnimation' introuvable dans VisualTree.
Assez juste. Donc, loin d'utiliser un convertisseur de valeur personnalisé ou de mettre le nombre d'animation sur le modèle de vue et de le lier, quelles sont mes options?
Il pourrait être utile http://stackoverflow.com/questions/2764415/how-to-give-the-condition-for-eventtrigger –