2010-12-20 11 views
13

Estoy trabajando para ampliar el tamaño de Microsoft Adorner ejemplo y necesito poder reposicionar el elemento después de decir que se ha arrastrado el control deslizante inferior izquierdo.Obteniendo las coordenadas superiores izquierdas de un UIElement de WPF

Así que si tengo un cuadro de texto de 150 de ancho, 35 de alto posicionado en mi formulario, y el asa de arrastre inferior izquierda cambia el ancho a 200 de ancho, la mano derecha del cuadro de texto permanece sin cambios pero el borde izquierdo se mueve a la izquierda.

Así que necesito saber las coordenadas superiores izquierdas del UIElement. He intentado con Canvas.GetLeft y Canvas.GetTop pero devuelven NaN, lo cual es confuso.

Acabo de probar VisualTreeHelper.GetOffset que devuelve un desplazamiento pero cuando intentas usarlo en el método de organización del elemento, desaparece, presumiblemente porque los valores en el desplazamiento son demasiado altos.

En los días anteriores a Wpf el sistema de coordenadas era bastante simple, wpf ha complicado demasiado las cosas, creo.

Respuesta

8

Puede transformar las coordenadas del UIElement en su elemento primario. En tu caso, es una forma. Aquí está un ejemplo de un método que devuelve las coordenadas de una imagen visual:

private Point GetPosition(Visual element) { 
    var positionTransform = element.TransformToAncestor(MyForm); 
    var areaPosition = positionTransform.Transform(new Point(0, 0)); 

    return areaPosition; 
} 
21

Y si alguien quiere coordenadas de pantalla del control :

Point targetLoc = targetCtrl.PointToScreen(new Point(0, 0)); 

(esto no coincide con la descripción de la rosca, pero coincide con el título. Supuse que podría ayudar a las personas a ingresar a los resultados de búsqueda)

+0

¡Exactamente lo que estaba buscando! – Shefali

+1

Llegó de google a esta publicación (por el título) para obtener esta respuesta. ¡Gracias! – StinkyCat

Cuestiones relacionadas