2011-05-05 2 views
2

En cours d'extraction ma cheveux sur le problème suivant. Mon code ajoute Rectangle s à un Grid comme suit:Children.Add() et RegisterName()

Dim rect As Rectangle 
' Set a bunch of properties of rect here' 

myGrid.Children.Add(rect) 

Il travaillait très bien, jusqu'à ce que je devais trouver mes rectangles dans la grille. Je viens de passer une heure à essayer de comprendre exactement comment utiliser RegisterName(), mais hélas, je suis défaillant.

Devrait-il être myGrid.RegisterName(rect.Name, rect), rect.RegisterName(rect.Name, myGrid), ou quoi d'autre?

Dois-je le faire avant, après ou à la place de myGrid.Children.Add(rect). J'ai essayé chaque combinaison et les rectangles n'apparaissent plus sur la grille.

Répondre

0

Depuis aucune réponse ici m'a aidé, je posterai ma propre (semi-) solution. J'ai lu sur plusieurs sites et forums, il est généralement pas une bonne pratique pour utiliser FindName de cette manière. C'est vraiment pour analyser le code XAML existant, tout le reste est la limite hacking la méthode.

Des choses comme VisualtreeHelper et certaines autres astuces peuvent aider à obtenir les éléments corrects de l'interface graphique. On peut toujours parcourir tous les éléments disponibles s'il n'y en a pas trop et la performance n'est pas un gros problème (c'est dans mon cas). Je l'ai fait en créant simplement un tableau de références à tous les éléments d'interface utilisateur pertinents et les ai trouvés ainsi. Votre solution peut être différente selon l'implémentation et la conception. Ma solution n'est pas parfaite et élégante, mais elle fait le travail avec presque aucun compromis de performance.

0

Je ne pense pas que vous devez appeler explicitement RegisterName ... Rectangle a une propriété Name, comme tous FrameworkElement s, vous pouvez simplement appeler FindName sur le parent pour trouver votre Rectangle ...

+0

Il ne le trouve pas. Aucune idée pourquoi. Quand je navigue manuellement dans les enfants de 'myGrid', je vois le rectangle avec le bon nom. Cependant, '.FindName (" rectName ")' ne renvoie 'Nothing'. – Phonon

Questions connexes