2010-02-04 8 views
5

Estoy usando el método VisualTreeHelper FindElementsInHostCoordinates para buscar un ListBoxItem en la ubicación X e Y dada. Sin embargo, los valores X e Y parecen estar relacionados con los puntos de toda la página, no solo con el ListBox que me interesa (aunque estoy pasando ese elemento al parámetro del subárbol del método). A continuación, esto se refiere a un control personalizado que se deriva de ListBox.FindElementsInHostCoordinates Relativo al espacio de control no completo Página

foreach (UIElement element in VisualTreeHelper.FindElementsInHostCoordinates(new Point(X, Y), this)) 
{ 
    if (element is ListBoxItem) 
    { 
     int index = this.ItemContainerGenerator.IndexFromContainer(element); 
     break; 
    } 
} 

Por lo tanto, (0,0) habría relativa a la esquina superior izquierda del plug-in de todo no es la esquina superior izquierda del cuadro de lista. ¿Necesito hacer algo de trabajo matemático aquí (en código) para transformar las coordenadas de la página a las coordenadas del ListBox o hay alguna otra forma de hacer una prueba de impacto para decir si un punto X e Y dado está sobre un ListBoxItem?

Gracias.

Respuesta

9

Me di cuenta de esto (wow). Determiné los valores superior e izquierdo de mi control y luego añadí el X e Y los valores internos de mi control:

GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement); 
Point offset = gt.Transform(new Point(0, 0)); 
double controlTop = offset.Y + Y; 
double controlLeft = offset.X + X; 

Por lo tanto, me puede pasar en los valores de Y respecto a mi control X y, aunque este código transformaré a coordenadas globales

Funciona para mí y ¡oye !, sin insignia de tumbleweed en esta pregunta. :)

+0

Puede considerar el uso de la etiqueta sin adornos "silverlight" en sus futuras preguntas, consigue más ojos. – AnthonyWJones

+0

Gracias por el consejo. Ponle tiza a otro en los detalles del diablo. :) – beaudetious

Cuestiones relacionadas