2008-09-05 19 views

Respuesta

34

De "WPF Unleashed", página 383:

prueba visual del golpe pueden informarle sobre todosVisual s que se cruzan una ubicación, [...] debe utilizar [...] el método [VisualTreeHelper.]HitTest que acepta un delegado HitTestResultCallback. Antes de esta versión de HitTest devuelve, el delegado se invoca una vez para cada relevante Visual, comenzando por el arriba y terminando en el extremo inferior.

La firma de una devolución de llamada tal es

HitTestResultBehavior Callback(HitTestResult result) 

y tiene que volver HitTestResultBehaviour.Continue para recibir otros golpes, como se muestra a continuación (de la página enlazada en MSDN):

// Return the result of the hit test to the callback. 
public HitTestResultBehavior MyHitTestResult(HitTestResult result) 
{ 
    // Add the hit test result to the list that will be processed after the enumeration. 
    hitResultsList.Add(result.VisualHit); 

    // Set the behavior to return visuals at all z-order levels. 
    return HitTestResultBehavior.Continue; 
} 

Para obtener más información, consulte el MSDN documentation for VisualTreeHelper.HitTest.

+5

Para obtener un buen ejemplo, consulte el siguiente enlace msdn (sección: Uso de una devolución de llamada del resultado de la prueba Hit). [http://msdn.microsoft.com/en-us/library/ms752097.aspx](http://msdn.microsoft.com/en-us/library/ms752097.aspx) –

+1

página 503 en la edición 2010 de el libro. FYI. – Sabuncu

+1

Tenga en cuenta que obtiene un elemento de árbol visual que la mayoría de las veces no es lo que necesita. Tienes que buscar recursivamente a través de los padres de los hits para obtener tus elementos de vista lógica. – henon

3
+0

La sobrecarga utilizada en el ejemplo vinculado ([que probablemente debería replicarse directamente también en la respuesta] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain- links-elsewhere-really-good-answers)) solo encontrará el elemento superior en la ubicación del mouse, ** ** una matriz de elementos debajo del mouse. –

36

También puede tratar de usar la propiedad Mouse.DirectlyOver para obtener el mayor elemento de la parte superior que está bajo el puntero del ratón.

+0

Esto ** ** no proporcionará una matriz de elementos debajo del mouse, pero de hecho solo devuelve el elemento superior. –

Cuestiones relacionadas