2010-05-28 5 views
2

J'essaye d'implémenter ce qui suit: J'ai un gestionnaire d'articles, qui a une classe d'article dedans. La classe Item peut stocker deux représentations visuelles possibles de celle-ci: BitmapImage (bitmap) et UserControl (vector).Partage même contrôle vectoriel entre différents endroits

Ensuite, dans le jeu, j'ai besoin de partager la même image ou le même contrôle vectoriel entre tous les endroits possibles. Par exemple, considérons 10 arbres sur la carte et tous pointent vers le même contrôle vectoriel. Ou dans certains cas, cela peut être une source d'image bitmap. Ainsi, le problème est que la source BitmapImage peut être facilement partagée dans l'application par plusieurs UIElements. Toutefois, lorsque j'essaie de partager le contrôle vectoriel, il échoue et indique que l'élément enfant est déjà un élément enfant d'un autre contrôle. Je veux savoir comment organiser cela de la meilleure façon. Par exemple, remplacez UserControl par un autre type de contrôle ou de stockage, mais je dois m'assurer qu'il supporte les animations de Storyboard à l'intérieur.

Le code ressemble à ceci:

if (bi.item.BitmapSource != null) 
    { 
     Image previewImage = new Image(); 
     previewImage.Source = bi.item.BitmapSource; 
     itemPane.ItemPreviewCanvas.Children.Add(previewImage); 
    } else 
    if (bi.item.VectorSource != null) 
    { 
     UserControl previewControl = bi.item.VectorSource; 
     itemPane.ItemPreviewCanvas.Children.Add(previewControl); 
    } 

Ou il est impossible de partager même contrôle dans des endroits différents, alors quelle est la meilleure façon de faire une copie, ou la meilleure façon de stocker des données vectorielles.

Merci d'avance

Répondre

1

Donc, j'ai trouvé le problème. Il est possible d'attacher le même UserControl à différents contrôles.

Cependant, lors de la mise à jour, je supprimais le contrôle, puis le remplissais de nouveau avec un nouveau pointeur, qui était parfois le même qu'avant la suppression, mais il était toujours en mémoire. Et donc c'était comme le même contrôle d'utilisateur attaché au même parent.

J'ai ajouté une ligne de code qui nettoyait tous les enfants dans le contrôle, avant de le mettre à jour avec le nouveau vecteur UserControl, et fonctionne maintenant comme un charme.

Questions connexes