Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo realizar una prueba de posicionamiento en un objeto visual utilizando un objeto Geometry como parámetro de prueba de posicionamiento.
Ejemplo
En el ejemplo siguiente se muestra cómo configurar una prueba de posicionamiento utilizando GeometryHitTestParameters para el método HitTest. El valor de Point que se pasa al método OnMouseDown se utiliza para crear un objeto Geometry con el fin de expandir el intervalo de la prueba de posicionamiento.
' Respond to the mouse button down event by setting up a hit test results callback.
Private Overloads Sub OnMouseDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
' Retrieve the coordinate of the mouse position.
Dim pt As Point = e.GetPosition(CType(sender, UIElement))
' Expand the hit test area by creating a geometry centered on the hit test point.
Dim expandedHitTestArea As New EllipseGeometry(pt, 10.0, 10.0)
' Clear the contents of the list used for hit test results.
hitResultsList.Clear()
' Set up a callback to receive the hit test result enumeration.
VisualTreeHelper.HitTest(myControl, Nothing, New HitTestResultCallback(AddressOf MyHitTestResultCallback), New GeometryHitTestParameters(expandedHitTestArea))
' Perform actions on the hit test results list.
If hitResultsList.Count > 0 Then
ProcessHitTestResultsList()
End If
End Sub
// Respond to the mouse button down event by setting up a hit test results callback.
private void OnMouseDown(object sender, MouseButtonEventArgs e)
{
// Retrieve the coordinate of the mouse position.
Point pt = e.GetPosition((UIElement)sender);
// Expand the hit test area by creating a geometry centered on the hit test point.
EllipseGeometry expandedHitTestArea = new EllipseGeometry(pt, 10.0, 10.0);
// Clear the contents of the list used for hit test results.
hitResultsList.Clear();
// Set up a callback to receive the hit test result enumeration.
VisualTreeHelper.HitTest(myControl, null,
new HitTestResultCallback(MyHitTestResultCallback),
new GeometryHitTestParameters(expandedHitTestArea));
// Perform actions on the hit test results list.
if (hitResultsList.Count > 0)
{
ProcessHitTestResultsList();
}
}
La propiedad IntersectionDetail de GeometryHitTestResult proporciona información sobre los resultados de una prueba de posicionamiento que utiliza Geometry como parámetro. En la ilustración siguiente se muestra la relación entre la geometría de una prueba de posicionamiento (círculo azul) y el contenido representado del objeto visual (cuadrado rojo).
Intersección entre la geometría de una prueba de posicionamiento y un objeto visual de destino
En el ejemplo siguiente se muestra cómo implementar una devolución de llamada de prueba de posicionamiento cuando se utiliza Geometry como parámetro de prueba de posicionamiento. El parámetro result se convierte en GeometryHitTestResult para recuperar el valor de la propiedad IntersectionDetail. El valor de la propiedad permite determinar si el parámetro de prueba de posicionamiento Geometry está incluido total o parcialmente dentro del contenido representado del destino de la prueba de posicionamiento. En este caso, en el ejemplo de código únicamente se agregan los resultados de la prueba de posicionamiento correspondientes a los objetos visuales que están incluidos totalmente dentro del límite del elemento de destino.
' Return the result of the hit test to the callback.
Public Function MyHitTestResultCallback(ByVal result As HitTestResult) As HitTestResultBehavior
' Retrieve the results of the hit test.
Dim intersectionDetail As IntersectionDetail = (CType(result, GeometryHitTestResult)).IntersectionDetail
Select Case intersectionDetail
Case IntersectionDetail.FullyContains
' Add the hit test result to the list that will be processed after the enumeration.
hitResultsList.Add(result.VisualHit)
Return HitTestResultBehavior.Continue
Case IntersectionDetail.Intersects
' Set the behavior to return visuals at all z-order levels.
Return HitTestResultBehavior.Continue
Case IntersectionDetail.FullyInside
' Set the behavior to return visuals at all z-order levels.
Return HitTestResultBehavior.Continue
Case Else
Return HitTestResultBehavior.Stop
End Select
End Function
// Return the result of the hit test to the callback.
public HitTestResultBehavior MyHitTestResultCallback(HitTestResult result)
{
// Retrieve the results of the hit test.
IntersectionDetail intersectionDetail = ((GeometryHitTestResult)result).IntersectionDetail;
switch (intersectionDetail)
{
case IntersectionDetail.FullyContains:
// Add the hit test result to the list that will be processed after the enumeration.
hitResultsList.Add(result.VisualHit);
return HitTestResultBehavior.Continue;
case IntersectionDetail.Intersects:
// Set the behavior to return visuals at all z-order levels.
return HitTestResultBehavior.Continue;
case IntersectionDetail.FullyInside:
// Set the behavior to return visuals at all z-order levels.
return HitTestResultBehavior.Continue;
default:
return HitTestResultBehavior.Stop;
}
}
![]() |
---|
No debe llamarse a la devolución de llamada de HitTestResult cuando el detalle de la intersección es Empty. |
Vea también
Tareas
Cómo: Geometría de una prueba de seguimiento en un objeto visual