Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
HandoffBehavior, énumération
Spécifie comment les nouvelles animations interagissent avec les animations existantes déjà appliquées à une propriété.
Assembly : PresentationCore (dans PresentationCore.dll)
| Nom de membre | Description | |
|---|---|---|
| SnapshotAndReplace | Les nouvelles animations remplacent n'importe quelle animation existante sur les propriétés auxquelles elles sont appliquées. | |
| Compose | Les nouvelles animations sont combinées avec les animations existantes en ajoutant les nouvelles animations à la fin de la chaîne de composition. |
Lorsque vous appliquez un Storyboard, un AnimationTimeline ou un AnimationClock à une propriété à l'aide de HandoffBehavior.Compose, tous les objets Clock précédemment associés à cette propriété continuent d'utiliser les ressources système ; le système de minuterie ne supprime pas les horloges automatiquement.
Pour éviter tout problème de performance lors de l'application d'un grand nombre d'horloges à l'aide de HandoffBehavior.Compose, vous devez supprimer la composition des horloges de la propriété animée une fois qu'elles ont terminé leur tâche. Il existe plusieurs manières de supprimer une horloge :
-
Pour supprimer toutes les horloges d'une propriété, utilisez la méthode ApplyAnimationClock(DependencyProperty, AnimationClock) ou BeginAnimation(DependencyProperty, AnimationTimeline) de l'objet animé. Spécifiez la propriété animée comme premier paramètre et null comme second paramètre. Cela supprime toutes les horloges d'animation de la propriété.
-
Pour supprimer un AnimationClock spécifique d'une liste d'horloges, utilisez la propriété Controller de AnimationClock pour récupérer un ClockController, puis appelez la méthode Remove de ClockController. Cela s'effectue généralement dans le gestionnaire d'événements Completed pour une horloge. Notez que seules les horloges racine peuvent être contrôlées par un ClockController ; la propriété Controller d'une horloge enfant retourne null. Notez également que l'événement Completed n'est pas déclenché si la durée effective de l'horloge est illimitée. Dans ce cas, l'utilisateur doit déterminer quand appeler Remove.
Cela constitue principalement un problème pour les animations sur des objets qui ont une durée de vie importante. Lorsqu'un objet est récupéré par le garbage collector, ses horloges sont également déconnectées et récupérées.
Pour plus d'informations sur les objets d'horloge, consultez Vue d'ensemble de l'animation et du système de minutage.
This example shows how to specify handoff behavior between storyboard animations. The HandoffBehavior property of BeginStoryboard specifies how new animations interact with any existing ones that are already applied to a property.
The following example creates two buttons that enlarge when the mouse cursor moves over them and become smaller when the cursor moves away. If you mouse over a button and then quickly remove the cursor, the second animation will be applied before the first one is finished. It is when two animations overlap like this that you can see the difference between the HandoffBehavior values of Compose and SnapshotAndReplace. A value of Compose combines the overlapping animations causing a smoother transition between animations while a value of SnapshotAndReplace causes the new animation to immediately replace the earlier overlapping animation.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Page.Resources> <!-- This Style specifies mouseover and mouseout behaviors. The button gets larger when the cursor moves over it and smaller when the cursor moves away. Note that the same Properties (ScaleX and ScaleY) are being targeted by both animations. The BeginStoryboard for each animation uses a HandoffBehavior of "Compose" which causes the old animation to interpolate more gradually into the new one. --> <Style x:Key="ButtonWithCompose" TargetType="{x:Type Button}"> <Setter Property="Button.RenderTransform"> <Setter.Value> <ScaleTransform CenterX="50" CenterY="50" ScaleX="1" ScaleY="1" /> </Setter.Value> </Setter> <Style.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard > <Storyboard> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleX" To="3" /> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleY" To="3" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <EventTrigger RoutedEvent="Mouse.MouseLeave"> <EventTrigger.Actions> <BeginStoryboard HandoffBehavior="Compose"> <Storyboard> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleX" /> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleY" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> <!-- For this button style, BeginStoryboard uses the default HandoffBehavior of "SnapShotAndReplace" --> <Style x:Key="ButtonWithSnapShotAndReplace" TargetType="{x:Type Button}"> <Setter Property="Button.RenderTransform"> <Setter.Value> <ScaleTransform CenterX="50" CenterY="50" ScaleX="1" ScaleY="1" /> </Setter.Value> </Setter> <Style.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboard > <Storyboard> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleX" To="3" /> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleY" To="3" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <EventTrigger RoutedEvent="Mouse.MouseLeave"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleX" /> <DoubleAnimation Duration="0:0:2" Storyboard.TargetProperty="RenderTransform.ScaleY" /> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> </Page.Resources> <Canvas> <Button Style="{StaticResource ButtonWithSnapShotAndReplace}" Canvas.Top="200" Canvas.Left="200" Width="100" Height="100"> SnapShotAndReplace </Button> <Button Style="{StaticResource ButtonWithCompose}" Canvas.Top="200" Canvas.Left="400" Width="100" Height="100"> Compose </Button> </Canvas> </Page>
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.