2009-10-02 22 views
8

Digamos que tengo un StackPanel que se llena dinámicamente con copia, cambiando la posición Y de los elementos que contiene. Tengo un elemento específico dentro de ese StackPanel en el que quiero encontrar la posición Y de (en relación con el StackPanel o de otro modo) después de que StackPanel haya terminado de reposicionar todos sus elementos secundarios.¿Cómo obtener la posición de un elemento en 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 

me di cuenta de que los métodos de este tipo: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 no funcionan ya que la posición devuelta es la posición de la StackPanel y no el elemento secundario que estoy focalización.

Respuesta

14

Los métodos en el link you posted deberían funcionar bien, siempre que los llame correctamente.

es necesario llamar con el UIElement correcta - en este caso, el uso de element1 a la RootVisual le dará la posición completa de element1:

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

+1. Estaba buscando años para eso, me sirve para no seguir el enlace en la pregunta (¿por qué odio hacer eso?) – AnthonyWJones

+0

¿Alguna idea de cómo obtener el puesto en una aplicación de WPF también? –

+0

@eranotzap Esto también funciona en una aplicación WPF. http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx –

Cuestiones relacionadas