2014-04-24 2 views
1

J'ai créé une classe "Component", qui sera ajoutée aux enfants de ma toile. Après l'ajout, je veux positionner ces composants en utilisant par exemple:Silverlight/C# Canvas, ses UIElements et sa largeur

comp.setValue(Canvas.LeftProperty, 100d); 

qui fonctionne bien. Après cela, le composant sera ajouté au canevas. Maintenant, mon problème est d'obtenir la largeur réelle des composants. J'ai essayé ces choses comme

comp.Width; 
comp.ActualWidth; 

mais ils sont 0 ou NaN. À ma connaissance, cela devrait être comme ça. Parce qu'ils ont été ajoutés à la toile, et devrait y obtenir des tailles spécifiques, ou ai-je tort avec cela?

De plus, j'ai ajouté un événement OnClick sur ces composants, dans lequel ils écrivent leur ActualWidth sur la console, et cela fonctionne. Mais je veux obtenir ces informations directement après les avoir ajoutées.

Des idées?

Salutations et d'autres choses!

Répondre

0

Le cadre déclenchera un measure and arrange cycle lorsque vous ajouterez des enfants à un panneau inclus dans visual tree. Après ce passage de mise en page, vous pouvez obtenir la taille en demandant ActualWidth et ActualHeight. Apparemment, le cycle n'est pas terminé (ou doit encore être déclenché) lorsque votre code s'exécute. Alors, que pouvez-vous faire? Vous pouvez enregistrer un gestionnaire d'événements sur l'événement FrameworkElement.SizeChanged et exécuter votre code dans le gestionnaire d'événements.

Questions connexes