J'ai une application WPF simple qui contient un contrôle utilisateur animé par une paire de storyboards sur la fenêtre principale. J'anime l'opacité du contrôle utilisateur, scaletransform.scalex et scaletransform.scaley, pour l'afficher et l'exclure. Il a l'air cool sauf pour la première fois qu'il fonctionne. L'animation est prévue pour prendre 3/10 de seconde, bien que j'ai augmenté cela pendant mes tests. J'ai essayé de définir une valeur par défaut à une fraction de seconde pour voir s'il y a un problème où les valeurs des propriétés que j'anime ne sont pas par défaut comme prévu. Cela n'a rien fait. J'appelle même explicitement mon animation "hide" sur une fenêtre chargée pour voir si cela m'aiderait à définir mes valeurs par défaut, mais cela n'a pas fonctionné non plus. Y a-t-il une initialisation que le runtime fait la première fois que je lance l'animation? Existe-t-il un moyen que je puisse appeler explicitement ce type d'initialisation avant de montrer l'interface utilisateur? Le symptôme est que le contrôle n'est même pas visible jusqu'à environ 2/10 de seconde dans la première animation. Parfois, il est plus long et le contrôle apparaît après qu'il a été entièrement animé (l'opacité et la taille sont leurs valeurs finales quand il apparaît finalement).Première exécution de l'animation WPF
Répondre
Il semble que vous définissiez le DataContext de UserControl juste avant l'animation. Vraisemblablement, vous avez une liaison en cours, qui consiste à créer des objets visuels et à les ajouter à l'arbre visuel en même temps que l'animation est censée commencer. Cela nécessite un traitement pour lequel l'animation se bat. La façon d'éviter cela est d'avoir le contrôle instancié (avec DataContext), mais caché, de sorte que la création de l'objet visuel n'a pas besoin d'être effectuée au moment de l'animation. (via mon collègue Tim Lee)
D'accord, vous avez absolument raison ... et c'était aussi mon intuition initiale. Cependant, l'exécution essaye d'être trop intelligente pour son propre bien. Si j'essaie de le cacher de la vue (opacité, marge négative, scaletransform, translatetransform), il fait la même chose. Si je l'autorise à être visible, je n'ai même pas besoin de définir le DataContext en premier ... la première animation se passe bien. C'est presque comme si j'avais besoin de tromper le moteur en lui faisant croire qu'il est visible quand ce n'est pas le cas. Cela, ou j'ai besoin de savoir comment le dire explicitement pour construire l'arbre visuel. Ce dernier se sent moins hacky. – Rich
Je comprends que ce sujet est ancien, mais comment avez-vous fini par résoudre ce problème? Même en réglant les contrôles respectifs à 1 largeur n'a pas aidé. Je suis relativement nouveau à WPF et je n'ai donc pas trouvé de repères cachés entre les lignes ici. – Harti
- 1. exécution WPF routé manuellement les commandes
- 2. C# winforms: détermine la première exécution du programme
- 3. Commandes WPF - Exécution sans code par défaut
- 4. WPF Dispatcher et exécution en arrière-plan
- 5. Afficher la première image de la vidéo dans WPF MediaElement
- 6. Première rangée de style dans une Datagrid WPF
- 7. Capturer la première image d'une vidéo avec WPF
- 8. Comment ignorer l'orthographe lors d'une exécution dans WPF RichTextBox
- 9. Les cibles personnalisées sont ignorées après la première exécution dans la construction TFS
- 10. Exécution de JAI dans OSGi
- 11. Le flux de travail Sharepoint échoue lors de la première exécution mais réussit lorsqu'il est exécuté manuellement
- 12. Exécution JScript dans SilverlIght Application
- 13. Exécution fn_trace_gettable
- 14. Exécution wxPython
- 15. StringTokenizer - première chaîne?
- 16. TreeNode Largeur première enum?
- 17. Exécution de Django depuis IDLE
- 18. Exécution de l'application en continu
- 19. Exécution de plusieurs scripts Btrace
- 20. Exécution de Watin sur TeamCity
- 21. Exécution simultanée de 2 threads
- 22. Exécution de plusieurs instances d'Evince
- 23. Aide: Pourquoi ma première application WPF ne fonctionne-t-elle pas?
- 24. Exécution de Panda3D sur Python 2.6
- 25. Exécution de plusieurs émulateurs Android avec différents numéros de téléphone
- 26. Obtention de la première propriété JSON
- 27. Démarrage de ma première application métier?
- 28. Suppression de la première ligne preg_replace
- 29. Comment sélectionner la première ligne de la première table dans une page HTML en utilisant jQuery?
- 30. Exécution de Tomcat à partir de NetBeans
Quand/comment la première animation est-elle déclenchée? En outre, à partir des symptômes que vous avez décrits, il semble que l'opacité change à un rythme différent/après la transformation de l'échelle. – rmoore
La première animation est déclenchée car toutes les animations sont, par un clic de souris. Je fais cela dans le code derrière afin que je puisse marquer l'événement comme manipulé si nécessaire. L'opacité fonctionne également dans toutes les autres animations. Fondamentalement, il n'y a aucune différence dans le code entre la première animation et toute autre animation. Ce que je me demandais, c'est si l'exécution de WPF optimise quelque chose (mon contrôle est caché par ScaleTransform et Opacity par défaut), et c'est le prix que je paie pour une optimisation automatique de la mémoire ou quelque chose du genre. – Rich
Comme si le moteur d'exécution de WPF disait "oh, ce contrôle n'est pas visible dès le départ puisque ScaleTransforms et l'opacité est 0, chargeons ceci dynamiquement plus tard", et par conséquent il joue le rattrapage alors que je m'y attends ne s'anime même pas en vue. – Rich