8
votes

DradingVisual n'est pas rafraîchi

i Créez mon propre FrameworkElement et remplacement Visualchildrencount {get;} et getVisualchild (int index) en renvoyant mon propre DrawingVisual instance.

Si je modifie le contenu du visuel après le rendu initial (par exemple dans le gestionnaire de minuterie) à l'aide de DessinVisual.RenderOpen () et dans le contexte, l'élément n'est pas rafraîchi. < P> Voici l'échantillon le plus simple: xxx

invalidaisvisual () ne fait rien. Bien que si vous redimensionnez la fenêtre contenant l'élément, il est mis à jour.

Des idées sur la façon de rafraîchir correctement le contenu? De préférence sans introduisant de nouvelles propriétés de dépendance pour mon élément.


0 commentaires

3 Réponses :


9
votes

Ajouter

this.AddVisualChild(_visual);
this.AddLogicalChild(_visual);


1 commentaires

Ce code entraînera la mémoire visuelle de la mémoire, comme il est ajouté à l'arborescence, mais jamais enlevé. Un meilleur code consiste à ajouter le visuel sur l'événement chargé et à supprimer sur l'événement déchargé - voir ma réponse.



7
votes

basé sur Réponse de SMART_N , voici une solution améliorée qui ne fait pas fuir la mémoire: xxx


1 commentaires

Cela fonctionne parfaitement. Notez que chargée et déchargée peut se produire plusieurs fois sur la durée de vie de l'élément-cadre - j'ai supposé qu'ils ont été invoqués une fois qui mènent à mon visuel ne repeignant pas après quelques heures de ralenti.



0
votes

Si vous faites _visual a dessingroup , vous pouvez le ré-ouvrir ultérieurement et modifier ses commandes de dessin, et ils seront mis à jour.


0 commentaires