i Créez mon propre Si je modifie le contenu du visuel après le rendu initial (par exemple dans le gestionnaire de minuterie) à l'aide de Des idées sur la façon de rafraîchir correctement le contenu? De préférence FrameworkElement code> et remplacement
Visualchildrencount {get;} code> et
getVisualchild (int index) code> en renvoyant mon propre
DrawingVisual code> instance.
DessinVisual.RenderOpen () code> et dans le contexte, l'élément n'est pas rafraîchi. P> < P> Voici l'échantillon le plus simple: p>
invalidaisvisual () code> ne fait rien. Bien que si vous redimensionnez la fenêtre contenant l'élément, il est mis à jour. P>
3 Réponses :
Ajouter
this.AddVisualChild(_visual); this.AddLogicalChild(_visual);
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.
basé sur Réponse de SMART_N , voici une solution améliorée qui ne fait pas fuir la mémoire:
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.
Si vous faites _visual code> a
dessingroup code>, vous pouvez le ré-ouvrir ultérieurement et modifier ses commandes de dessin, et ils seront mis à jour. P>