J'implémente une animation de style "fourmis marching" en appliquant une animation StrokeDashOffset à un contrôle Rectangle. Je voudrais que l'animation soit lue lorsque le rectangle est visible mais ne prenne pas de cycles CPU supplémentaires quand il est caché. WPF est-il assez intelligent pour mettre automatiquement en pause l'animation lorsque le contrôle affecté est caché?Une animation de storyboard WPF continue-t-elle à s'exécuter lorsque le contrôle affecté est masqué?
Une animation de storyboard WPF continue-t-elle à s'exécuter lorsque le contrôle affecté est masqué?
Répondre
Non WPF est assez intelligent pour ne pas le faire :). La raison derrière cela est que vous ne pouvez pas prédire ce que fait la propriété animée (il peut s'agir de toute propriété de dépendance, pas nécessairement liée à l'apparence du contrôle).
Vous pouvez effectuer le test suivant.
XAML:
<Window x:Class="WpfApplication1.TestBrowser"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Animation Test"
Height="300"
Width="300">
<StackPanel>
<Button Content="Toggle label"
Click="ToggleLableClick"/>
<local:MyLabel x:Name="lbl" Content="Hello" />
</StackPanel>
</Window>
C#:
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
namespace WpfApplication1
{
public partial class TestBrowser : Window
{
public TestBrowser()
{
InitializeComponent();
var da = new DoubleAnimation(0, 10, new Duration(TimeSpan.FromSeconds(10)))
{
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
lbl.BeginAnimation(MyLabel.DoublePropertyProperty, da);
}
private void ToggleLableClick(object sender, RoutedEventArgs e)
{
lbl.Visibility = lbl.IsVisible ? Visibility.Collapsed : Visibility.Visible;
}
}
public class MyLabel : Label
{
public double DoubleProperty
{
get { return (double)GetValue(DoublePropertyProperty); }
set { SetValue(DoublePropertyProperty, value); }
}
public static readonly DependencyProperty DoublePropertyProperty =
DependencyProperty.Register("DoubleProperty", typeof(double), typeof(MyLabel),
new FrameworkPropertyMetadata(0.0,
FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange, OnDoublePropertyChanged));
private static void OnDoublePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Trace.WriteLine(e.NewValue);
}
protected override Size MeasureOverride(Size constraint)
{
Trace.WriteLine("Measure");
return base.MeasureOverride(constraint);
}
protected override Size ArrangeOverride(Size arrangeBounds)
{
Trace.WriteLine("Arrange");
return base.ArrangeOverride(arrangeBounds);
}
}
}
Vous remarquerez prouver de brillance WPF en sortie de débogage: il montre DoubleProperty
changements ne contrôlent la matière visible ou non, mais la visibilité compte quand il s'agit de mesurer/organiser. Les gestionnaires ne sont pas appelés lorsque le contrôle est réduit, bien que j'ai marqué DoubleProperty en tant que propriété qui affecte le meausre et arrange ...
Je pense que l'animation continue, mais le système de rendu se rendra compte que le rectangle est invisible et ne perdra pas de temps à redessiner quoi que ce soit.
Il est possible d'animer les propriétés Visibilité ou Opacité, ce qui ne fonctionnerait pas si le système d'animation prenait en compte la visibilité.
- 1. WPF: Validation.ErrorTemplate non masqué lorsque le contrôle (TextBox) est masqué
- 2. Comment ajouter une animation de storyboard XAML à un contrôle personnalisé WPF complet dans un XBAP?
- 3. WPF - Impossible d'arrêter une animation StoryBoard, IsControllable ne fonctionne pas?
- 4. Syntaxe entre parenthèses Silverlight/WPF dans une animation Storyboard
- 5. Créer une animation/storyboard pour un élément?
- 6. Ajouter une animation lorsque le contrôle utilisateur est visible et réduit En Wpf
- 7. WPF Storyboard problème débutant
- 8. Fondre tout contrôle en utilisant une animation WPF
- 9. WPF - Animation sur IsSelected
- 10. WPF Storyboard GetCurrentState
- 11. WPF Storyboard issue
- 12. Agrandir/Réduire Animation WPF
- 13. Le texte de l'en-tête WPF MenuItem est partiellement masqué
- 14. Réduire la durée lorsque le bouton de saisie est masqué
- 15. DataTrigger sur WPF Animation
- 16. Redémarrage d'un storyboard WPF
- 17. WPF - Animation sur SelectionChanged
- 18. Animation WPF - Animation de points de courbe de Bézier
- 19. WPF - événement terminé Storyboard
- 20. WPF rotate animation
- 21. WPF animation ne joue pas
- 22. WPF: Sélection de la cible d'une animation
- 23. Avec WPF, comment lier une animation avec un ContentControl?
- 24. Animation de rotation 3D WPF
- 25. Javascript est affecté à Localisé?
- 26. animation Storyboard basé sur la propriété de commande de modèle de contrôle
- 27. Animation de boutons WPF à l'intérieur d'un style
- 28. Animation WPF - Mettre une toile à l'avant
- 29. WPF, deux zones de texte, un déclencheur, une animation?
- 30. Nom de l'événement lorsque IBOutlet est affecté au contrôleur