Partager via


Comment : effectuer un test d'atteinte avec Geometry comme paramètre

Mise à jour : novembre 2007

Cet exemple indique comment effectuer un test d'atteinte sur un objet visuel à l'aide d'un Geometry comme paramètre de test d'atteinte.

Exemple

L'exemple suivant montre comment configurer un test d'atteinte en utilisant GeometryHitTestParameters pour la méthode HitTest. La valeur Point qui est passée à la méthode OnMouseDown est utilisée pour créer un objet Geometry afin d'étendre la plage du test d'atteinte.

// 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 propriété IntersectionDetail de GeometryHitTestResult fournit des informations sur les résultats d'un test d'atteinte qui utilise un Geometry comme paramètre de test d'atteinte. L'illustration suivante présente la relation entre la géométrie du test d'atteinte (le cercle bleu) et le contenu restitué de l'objet visuel cible (le carré rouge).

Intersection entre la géométrie de test d'atteinte et l'objet visuel cible

Diagramme du IntersectionDetail utilisé dans le test d'atteinte

L'exemple suivant indique comment implémenter un rappel de test d'atteinte lorsqu'un Geometry est utilisé comme paramètre de test d'atteinte. Le paramètre result est casté à un GeometryHitTestResult afin de récupérer la valeur de la propriété IntersectionDetail. La valeur de propriété vous permet de déterminer si le paramètre de test d'atteinte Geometry est contenu intégralement ou partiellement dans le contenu restitué de la cible du test d'atteinte. Dans ce cas, l'exemple de code ajoute uniquement les résultats de test d'atteinte à la liste pour les éléments visuels contenus intégralement dans la limite cible.

// 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;
    }
}
Remarque :

Le rappel HitTestResult ne doit pas être appelé lorsque le détail d'intersection est Empty.

Voir aussi

Tâches

Comment : effectuer un test d'atteinte avec Geometry dans un Visual

Concepts

Test d'atteinte dans la couche visuelle