2009-10-02 6 views
8

Dites que j'ai un StackPanel qui est dynamiquement rempli de copie, en changeant la position Y des éléments à l'intérieur. J'ai un élément spécifique dans ce StackPanel que je veux trouver la position Y de (par rapport au StackPanel ou autrement) après que le StackPanel ait fini de repositionner tous ses enfants.Comment obtenir la position d'un élément dans un StackPanel?

StackPanel sp = new StackPanel(); 
sp.Children.Add(someTextBlock); 
sp.Children.Add(element1); 
sp.Children.Add(element2); 
... 
someTextBlock.Text = "Lorem ipsum dolor..." // some text that pushes children of > index down 
// element1 got pushed down to some unknown position based on text length 
// now want to find the Y position of element1 

je remarquai que des méthodes comme celle-ci: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 ne fonctionnent pas depuis la position retournée est la position du StackPanel et non l'élément enfant je cible.

Répondre

14

Les méthodes du link you posted devraient fonctionner correctement, à condition de les appeler correctement.

Vous devez les appeler avec le UIElement correct - dans ce cas, en utilisant element1 au RootVisual vous donnera la position pleine de element1:

var transform = element1.TransformToVisual(Application.Current.RootVisual as FrameworkElement);   
Point absolutePosition = transform.Transform(new Point(0, 0)); 
+0

+1. Je cherchais des âges pour cela, me sert juste pour ne pas réellement suivre le lien dans la question (pourquoi je déteste faire ça?) – AnthonyWJones

+0

une idée de comment obtenir la position dans une application WPF ainsi? –

+0

@eranotzap Cela fonctionne également dans une application WPF. http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx –

Questions connexes