Treffertests in der visuellen EbeneHit Testing in the Visual Layer

Dieses Thema enthält eine Übersicht über die Treffertestfunktionen der visuellen Ebene.This topic provides an overview of hit testing functionality provided by the visual layer. Unterstützung für den Treffertest können Sie bestimmen, ob ein Geometrie- oder Punktwert Wert innerhalb des gerenderten Inhalts liegt eine Visual, sodass Sie Benutzeroberflächenverhalten, wie z. B. ein Positionierungsrechteck zum Auswählen von mehreren Objekten zu implementieren.Hit testing support allows you to determine whether a geometry or point value falls within the rendered content of a Visual, allowing you to implement user interface behavior such as a selection rectangle to select multiple objects.

TreffertestszenariosHit Testing Scenarios

Die UIElement -Klasse stellt die InputHitTest -Methode, die Ihnen ermöglicht, einen Treffertest für ein Element mithilfe eines bestimmten Koordinatenwerts.The UIElement class provides the InputHitTest method, which allows you to hit test against an element using a given coordinate value. In vielen Fällen die InputHitTest Methode bietet die gewünschte Funktionalität aus, für Implementieren des Treffertests von Elementen.In many cases, the InputHitTest method provides the desired functionality for implementing hit testing of elements. Es gibt jedoch mehrere Szenarios, bei denen es möglicherweise erforderlich ist, den Treffertest auf der visuellen Ebene zu implementieren.However, there are several scenarios in which you may need to implement hit testing at the visual layer.

  • Treffertest für nicht-UIElement Objekte: Dies gilt, wenn Treffertests für nicht-UIElement Objekte, z. B. DrawingVisual - oder Grafikobjekte.Hit testing against non-UIElement objects: This applies if you are hit testing non-UIElement objects, such as DrawingVisual or graphics objects.

  • Treffertests unter Verwendung einer Geometrie: Dies gilt mit Geometry-Objekt statt der Koordinatenwert eines Punkts ein Treffertest ausgeführt werden sollen.Hit testing using a geometry: This applies if you need to hit test using a geometry object rather than the coordinate value of a point.

  • Treffertest für mehrere Objekte: Dies gilt, wenn Sie einen Treffertest für mehrere Objekte, wie z.B. überlappende Objekte müssen.Hit testing against multiple objects: This applies when you need to hit test against multiple objects, such as overlapping objects. Sie können Ergebnisse für alle grafischen Elemente abrufen, die eine Geometrie oder einen Punkt kreuzen, nicht nur für das erste.You can get results for all visuals intersecting a geometry or point, not just the first one.

  • Ignorieren von UIElement Treffertests für Richtlinie: Dies gilt, wenn für das Ignorieren der UIElement Treffertests Richtlinie, die berücksichtigt Faktoren wie die, ob ein Element deaktiviert oder ausgeblendet ist.Ignoring UIElement hit testing policy: This applies when you need to ignore the UIElement hit testing policy, which takes into consideration such factors as whether an element is disabled or invisible.

Hinweis

Ein vollständiges Codebeispiel für einen Treffertest in der visuellen Ebene finden Sie unter Beispiel für einen Treffertest mit DrawingVisuals und Beispiel für einen Treffertest mit Win32-Interoperabilität.For a complete code sample illustrating hit testing at the visual layer, see Hit Test Using DrawingVisuals Sample and Hit Test with Win32 Interoperation Sample.

Unterstützung für den TreffertestHit Testing Support

Der Zweck der HitTest Methoden in der VisualTreeHelper Klasse ist, um zu bestimmen, ob ein Geometrie- oder Punktwert Koordinatenwert Bereich des gerenderten Inhalts eines angegebenen Objekts, z. B. ein Steuerelement oder eines grafischen Elements ist.The purpose of the HitTest methods in the VisualTreeHelper class is to determine whether a geometry or point coordinate value is within the rendered content of a given object, such as a control or graphic element. Sie können beispielsweise den Treffertest verwenden um zu bestimmen, ob ein Mausklick innerhalb des umgebenden Rechtecks eines Objekts in die Geometrie eines Kreises fällt.For example, you could use hit testing to determine whether a mouse click within the bounding rectangle of an object falls within the geometry of a circle. Sie können auch die Standardimplementierung für den Treffertest überschreiben, um Ihre eigenen benutzerdefinierten Treffertestberechnungen durchzuführen.You can also choose to override the default implementation of hit testing to perform your own custom hit test calculations.

Die folgende Abbildung zeigt die Beziehung zwischen dem Bereich eines nicht rechteckigen Objekts und seinem umschließenden Rechteck.The following illustration shows the relationship between a non-rectangular object's region and its bounding rectangle.

Diagramm eines gültigen treffertestbereichDiagram of valid hit test region
Diagramm eines gültigen TreffertestbereichsDiagram of valid hit test region

Treffertest und Z-ReihenfolgeHit Testing and Z-Order

Die visuelle Ebene für Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) unterstützt den Treffertest für alle Objekte unter einem Punkt oder einer Geometrie und nicht nur für das oberste Objekt.The Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) visual layer supports hit testing against all objects under a point or geometry, not just the top-most object. Die Ergebnisse werden in Z-Reihenfolge zurückgegeben.Results are returned in z-order. Allerdings das visuelle Objekt, das Sie als Parameter übergeben die HitTest Methode bestimmt, welcher Teil der visuellen Struktur dem Treffertest unterzogen wird getestet.However, the visual object that you pass as the parameter to the HitTest method determines which portion of the visual tree that will be hit test. Sie können einen Treffertest für die ganze visuelle Struktur oder einen beliebigen Teil davon durchführen.You can hit test against the entire visual tree, or any portion of it.

In der folgenden Abbildung befindet sich das Kreisobjekt sowohl auf dem Quadrat als auch auf dem Dreieck.In the following illustration, the circle object is on top of both the square and triangle objects. Wenn Sie nur Treffertest für das visuelle Objekt, dessen Wert der Z-Reihenfolge oberste ist, können Sie festlegen, dass die visuellen Treffertest-Enumeration zurückgegeben Stop aus der HitTestResultCallback das Durchlaufen des Treffertests nach dem ersten Element zu beenden.If you are only interested in hit testing the visual object whose z-order value is top-most, you can set the visual hit test enumeration to return Stop from the HitTestResultCallback to stop the hit test traversal after the first item.

Diagramm der z-Reihenfolge einer visuellen StrukturDiagram of the z-order of a visual tree
Diagramm der Z-Reihenfolge einer visuellen StrukturDiagram of the z-order of a visual tree

Wenn Sie alle visuellen Objekte unter einem bestimmten Zeitpunkt oder einer Geometrie auflisten möchten, zurückgeben Continue aus der HitTestResultCallback.If you want to enumerate all visual objects under a specific point or geometry, return Continue from the HitTestResultCallback. Dies bedeutet, dass Sie den Treffertest sogar für vollständig von anderen Objekten überdeckte visuelle Objekte durchführen können.This means you can hit test for visual objects that are beneath other objects, even if they are wholly obscured. Weitere Informationen finden Sie im Beispielcode im Abschnitt „Verwenden eines Treffertest-Ergebnisrückrufs“.See the sample code in the section "Using a Hit Test Results Callback" for more information.

Hinweis

Auch für transparente visuelle Objekte kann der Treffertest durchgeführt werden.A visual object that is transparent can also be hit test.

Verwenden des StandardtreffertestsUsing Default Hit Testing

Sie können ermitteln, ob sich ein Punkt innerhalb der Geometrie eines visuellen Objekts, indem die HitTest Methode, um anzugeben, ein visuelles Objekt und einem Punkt-Koordinatenwert ab, für den Test.You can identify whether a point is within the geometry of a visual object, by using the HitTest method to specify a visual object and a point coordinate value to test against. Der visuelle Objektparameter identifiziert den Ausgangspunkt in der visuellen Struktur für die Treffertestsuche.The visual object parameter identifies the starting point in the visual tree for the hit test search. Wenn ein visuelles Objekt, dessen Geometrie die Koordinate enthält, in der visuellen Struktur gefunden wird, festgelegt ist die VisualHit Eigenschaft eine HitTestResult Objekt.If a visual object is found in the visual tree whose geometry contains the coordinate, it is set to the VisualHit property of a HitTestResult object. Die HitTestResult wird dann zurückgegeben, die HitTest Methode.The HitTestResult is then returned from the HitTest method. Wenn der Punkt in der visuellen Teilstruktur nicht Sie den Treffertest durchführen enthalten ist, HitTest gibt null.If the point is not contained with the visual sub-tree you are hit testing, HitTest returns null.

Hinweis

Der Standardtreffertest gibt immer das oberste Objekt in der Z-Reihenfolge zurück.Default hit testing always returns the top-most object in the z-order. Wenn Sie alle visuellen Objekte identifizieren möchten – auch diejenigen, die teilweise oder vollständig verdeckt sind –, verwenden Sie einen Treffertest-Ergebnisrückruf.In order to identify all visual objects, even those that may be partly or wholly obscured, use a hit test result callback.

Der Koordinatenwert, Sie als Punktparameter für übergeben, die HitTest Methode muss relativ zum Koordinatenraum des visuellen Objekts werden Sie den Treffertest durchführen.The coordinate value you pass as the point parameter for the HitTest method has to be relative to the coordinate space of the visual object you are hit testing against. Wenn Sie beispielsweise visuelle Objekte geschachtelt haben, die im übergeordneten Koordinatenraum bei (100, 100) definiert sind, entspricht der Treffertest eines untergeordneten visuellen Objekts bei (0, 0) dem Treffertest bei (100, 100) im übergeordneten Koordinatenraum.For example, if you have nested visual objects defined at (100, 100) in the parent's coordinate space, then hit testing a child visual at (0, 0) is equivalent to hit testing at (100, 100) in the parent's coordinate space.

Der folgende Code zeigt, wie Sie Mausereignishandler für Einrichten einer UIElement -Objekt, das verwendet wird, zum Erfassen von Ereignissen für den Treffertest durchführen.The following code shows how to set up mouse event handlers for a UIElement object that is used to capture events used for hit testing.

// Respond to the left mouse button down event by initiating the hit test.
private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);

    // Perform the hit test against a given portion of the visual object tree.
    HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);

    if (result != null)
    {
        // Perform action on hit visual object.
    }
}
' Respond to the left mouse button down event by initiating the hit test.
Private Overloads Sub OnMouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    ' Retrieve the coordinate of the mouse position.
    Dim pt As Point = e.GetPosition(CType(sender, UIElement))

    ' Perform the hit test against a given portion of the visual object tree.
    Dim result As HitTestResult = VisualTreeHelper.HitTest(myCanvas, pt)

    If result IsNot Nothing Then
        ' Perform action on hit visual object.
    End If
End Sub

Beeinflussung des Treffertests durch die visuelle StrukturHow the Visual Tree Affects Hit Testing

Der Startpunkt in der visuellen Struktur bestimmt, welche Objekte während der Treffertestenumeration der Objekte zurückgegeben werden.The starting point in the visual tree determines which objects are returned during the hit test enumeration of objects. Wenn Sie für mehrere Objekte einen Treffertest durchführen möchten, muss das in der visuellen Struktur als Startpunkt verwendete Objekt das gemeinsame übergeordnete Element aller betroffenen Objekte sein.If you have multiple objects you want to hit test, the visual object used as the starting point in the visual tree must be the common ancestor of all objects of interest. Wenn Sie beispielsweise sowohl für das Schaltflächenelement als auch für das visuelle Zeichnungsobjekt im folgenden Diagramm einen Treffertest durchführen möchten, müssen Sie den Startpunkt in der visuellen Struktur auf das gemeinsame übergeordnete Objekt für diese beiden Elemente festlegen.For example, if you were interested in hit testing both the button element and drawing visual in the following diagram, you would have to set the starting point in the visual tree to the common ancestor of both. In diesem Fall ist das Canvas-Element das übergeordnete Objekt für das Schaltflächenelement und das visuelle Zeichnungsobjekt.In this case, the canvas element is the common ancestor of both the button element and the drawing visual.

Diagramm der Hierarchie einer visuellen StrukturDiagram of a visual tree hierarchy
Diagramm einer visuellen StrukturhierarchieDiagram of a visual tree hierarchy

Hinweis

Die IsHitTestVisible Eigenschaft ruft ab oder legt einen Wert, der deklariert, ob eine UIElement-abgeleitete Objekt als Treffertestergebnis von einem Teil des gerenderten Inhalts zurückgegeben werden kann.The IsHitTestVisible property gets or sets a value that declares whether a UIElement-derived object can possibly be returned as a hit test result from some portion of its rendered content. Dadurch haben Sie die Möglichkeit, selektiv Änderungen an der visuellen Struktur vorzunehmen, um zu bestimmen, welche visuellen Objekte an einem Treffertest beteiligt sind.This allows you to selectively alter the visual tree to determine which visual objects are involved in a hit test.

Verwenden eines Treffertest-ErgebnisrückrufsUsing a Hit Test Result Callback

Sie können alle visuellen Objekte in einer visuellen Struktur auflisten, deren Geometrie einen angegebenen Koordinatenwert enthält.You can enumerate all visual objects in a visual tree whose geometry contains a specified coordinate value. Dadurch können Sie alle visuellen Objekte identifizieren, auch diejenigen, die teilweise oder vollständig von anderen visuellen Objekten verdeckt werden.This allows you to identify all visual objects, even those that may be partly or wholly obscured by other visual objects. Visuellen Objekte in einem visuellen Struktur Auflisten der HitTest Methode mit einer Treffertest-Rückruffunktion.To enumerate visual objects in a visual tree use the HitTest method with a hit test callback function. Die Treffertest-Rückruffunktion wird vom System aufgerufen, wenn der von Ihnen angegebene Koordinatenwert in einem visuellen Objekt enthalten ist.The hit test callback function is called by the system when the coordinate value you specify is contained in a visual object.

Während der Auflistung der Treffertestergebnisse sollten Sie keine Vorgänge ausführen, die die visuelle Struktur ändern.During the hit test results enumeration, you should not perform any operation that modifies the visual tree. Das Hinzufügen oder Entfernen eines Objekts aus der visuellen Struktur, während diese durchlaufen wird, kann zu unvorhersehbarem Verhalten führen.Adding or removing an object from the visual tree while it is being traversed can result in unpredictable behavior. Sie können nach der die visuelle Struktur sicher Ändern der HitTest Methodenrückgabe.You can safely modify the visual tree after the HitTest method returns. Sie möchten eine Datenstruktur, bereitstellen, z. B. eine ArrayList, um Werte während der Treffertestenumeration Ergebnisse zu speichern.You may want to provide a data structure, such as an ArrayList, to store values during the hit test results enumeration.

// Respond to the right mouse button down event by setting up a hit test results callback.
private void OnMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);

    // 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(myCanvas, null,
        new HitTestResultCallback(MyHitTestResult),
        new PointHitTestParameters(pt));

    // Perform actions on the hit test results list.
    if (hitResultsList.Count > 0)
    {
        Console.WriteLine("Number of Visuals Hit: " + hitResultsList.Count);
    }
}
' Respond to the right mouse button down event by setting up a hit test results callback.
Private Overloads Sub OnMouseRightButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    ' Retrieve the coordinate of the mouse position.
    Dim pt As Point = e.GetPosition(CType(sender, UIElement))

    ' 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(myCanvas, Nothing, New HitTestResultCallback(AddressOf MyHitTestResult), New PointHitTestParameters(pt))

    ' Perform actions on the hit test results list.
    If hitResultsList.Count > 0 Then
        Console.WriteLine("Number of Visuals Hit: " & hitResultsList.Count)
    End If
End Sub

Die Treffertest-Rückrufmethode definiert die Aktionen, die ausgeführt werden, wenn ein Treffertest für ein bestimmtes visuelles Objekt in der visuellen Struktur identifiziert wird.The hit test callback method defines the actions you perform when a hit test is identified on a particular visual object in the visual tree. Nach dem Durchführen der Aktionen, die Sie zurückgeben einer HitTestResultBehavior Wert, der bestimmt, ob die Enumeration von jeder anderen visuellen Objekten oder nicht fortgesetzt werden.After you perform the actions, you return a HitTestResultBehavior value that determines whether to continue the enumeration of any other visual objects or not.

// 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;
}
' Return the result of the hit test to the callback.
Public Function MyHitTestResult(ByVal result As HitTestResult) As HitTestResultBehavior
    ' 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
End Function

Hinweis

Die Auflistung der visuellen Objekttreffer erfolgt in Z-Reihenfolge.The order of enumeration of hit visual objects is by z-order. Das visuelle Objekt auf der obersten Z-Reihenfolgenebene ist das erste aufgelistete Objekt.The visual object at the top-most z-order level is the first object enumerated. Alle anderen visuellen Objekte werden absteigend gemäß der Z-Reihenfolge aufgelistet.Any other visual objects enumerated are at decreasing z-order level. Diese Auflistungsreihenfolge entspricht der Renderingreihenfolge der grafischen Elemente.This order of enumeration corresponds to the rendering order of the visuals.

Sie können die Enumeration von visuellen Objekten in der Treffertestfilter-Rückruffunktion jederzeit anhalten, indem zurückgeben Stop.You can stop the enumeration of visual objects at any time in the hit test callback function by returning Stop.

// Set the behavior to stop enumerating visuals.
return HitTestResultBehavior.Stop;
' Set the behavior to stop enumerating visuals.
Return HitTestResultBehavior.Stop

Verwenden eines Treffertestfilter-RückrufsUsing a Hit Test Filter Callback

Sie können einen optionalen Treffertestfilter verwenden, um die an die Treffertestergebnisse übergebenen Objekte zu begrenzen.You can use an optional hit test filter to restrict the objects that are passed on to the hit test results. Dadurch können Sie die Teile der visuellen Struktur ignorieren, die nicht in Ihren Treffertestergebnissen verarbeitet werden sollen.This allows you to ignore parts of the visual tree that you are not interested in processing in your hit test results. Um einen Treffertestfilter zu implementieren, können Sie auch eine Treffertest-Rückruffunktion definieren und als Parameterwert übergeben, beim Aufrufen der HitTest Methode.To implement a hit test filter, you define a hit test filter callback function and pass it as a parameter value when you call the HitTest method.

// Respond to the mouse wheel event by setting up a hit test filter and results enumeration.
private void OnMouseWheel(object sender, MouseWheelEventArgs e)
{
    // Retrieve the coordinate of the mouse position.
    Point pt = e.GetPosition((UIElement)sender);

    // 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(myCanvas,
                      new HitTestFilterCallback(MyHitTestFilter),
                      new HitTestResultCallback(MyHitTestResult),
                      new PointHitTestParameters(pt));

    // Perform actions on the hit test results list.
    if (hitResultsList.Count > 0)
    {
        ProcessHitTestResultsList();
    }
}
' Respond to the mouse wheel event by setting up a hit test filter and results enumeration.
Private Overloads Sub OnMouseWheel(ByVal sender As Object, ByVal e As MouseWheelEventArgs)
    ' Retrieve the coordinate of the mouse position.
    Dim pt As Point = e.GetPosition(CType(sender, UIElement))

    ' 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(myCanvas, New HitTestFilterCallback(AddressOf MyHitTestFilter), New HitTestResultCallback(AddressOf MyHitTestResult), New PointHitTestParameters(pt))

    ' Perform actions on the hit test results list.
    If hitResultsList.Count > 0 Then
        ProcessHitTestResultsList()
    End If
End Sub

Wenn Sie nicht, geben Sie die optionale Treffertestfilter-Rückruffunktion möchten, übergeben Sie einen null Wert als Parameter für die HitTest Methode.If you do not want to supply the optional hit test filter callback function, pass a null value as its parameter for the HitTest method.

// Set up a callback to receive the hit test result enumeration,
// but no hit test filter enumeration.
VisualTreeHelper.HitTest(myCanvas,
                  null,  // No hit test filtering.
                  new HitTestResultCallback(MyHitTestResult),
                  new PointHitTestParameters(pt));
' Set up a callback to receive the hit test result enumeration,
' but no hit test filter enumeration.
VisualTreeHelper.HitTest(myCanvas, Nothing, New HitTestResultCallback(AddressOf MyHitTestResult), New PointHitTestParameters(pt)) ' No hit test filtering.

Verzweigen einer visuellen Struktur mit einem TreffertestfilterPruning a visual tree using a hit test filter
Reduzieren der Verzweigungen in einer visuellen StrukturPruning a visual tree

Mit der Treffertestfilter-Rückruffunktion können Sie alle visuellen Objekte auflisten, deren gerenderte Inhalte die von Ihnen angegebenen Koordinaten enthalten.The hit test filter callback function allows you to enumerate through all the visuals whose rendered content contains the coordinates you specify. Sie können jedoch auch bestimmte Verzweigungen der visuellen Struktur ignorieren, die im Rahmen Ihrer Treffertestergebnis-Rückruffunktion nicht verarbeitet werden sollen.However, you may want to ignore certain branches of the visual tree that you are not interested in processing in your hit test results callback function. Der Rückgabewert der Treffertestfilter-Rückruffunktion bestimmt, welcher Typ von Aktion von der Enumeration der visuellen Objekte ausgeführt werden soll.The return value of the hit test filter callback function determines what type of action the enumeration of the visual objects should take. Wenn der Rückgabewert z. B. ContinueSkipSelfAndChildren, können Sie das aktuelle visuelle Objekt und seine untergeordneten Elemente aus der Treffertestergebnisse entfernen.For example, if you return the value, ContinueSkipSelfAndChildren, you can remove the current visual object and its children from the hit test results enumeration. Dies bedeutet, dass für die Treffertestergebnis-Rückruffunktion diese Objekte nicht in der Auflistung enthalten sind.This means that the hit test results callback function will not see these objects in its enumeration. Durch das Reduzieren der Verzweigungen in der visuellen Struktur von Objekten wird der Verarbeitungsaufwand während der Übergabe der Auflistung von Treffertestergebnissen verringert.Pruning the visual tree of objects decreases the amount of processing during the hit test results enumeration pass. Im folgenden Codebeispiel überspringt der Filter Bezeichnungen und ihre Nachfolgerelemente und führt für alle anderen Elemente Treffertests durch.In the following code example, the filter skips labels and their descendants and hit tests everything else.

// Filter the hit test values for each object in the enumeration.
public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
{
    // Test for the object value you want to filter.
    if (o.GetType() == typeof(Label))
    {
        // Visual object and descendants are NOT part of hit test results enumeration.
        return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
    }
    else
    {
        // Visual object is part of hit test results enumeration.
        return HitTestFilterBehavior.Continue;
    }
}
' Filter the hit test values for each object in the enumeration.
Public Function MyHitTestFilter(ByVal o As DependencyObject) As HitTestFilterBehavior
    ' Test for the object value you want to filter.
    If o.GetType() Is GetType(Label) Then
        ' Visual object and descendants are NOT part of hit test results enumeration.
        Return HitTestFilterBehavior.ContinueSkipSelfAndChildren
    Else
        ' Visual object is part of hit test results enumeration.
        Return HitTestFilterBehavior.Continue
    End If
End Function

Hinweis

Der Treffertestfilter-Rückruf wird gelegentlich aufgerufen, wenn der Treffertestergebnis-Rückruf nicht aufgerufen wird.The hit test filter callback will sometimes be called in cases where the hit test results callback is not called.

Überschreiben des StandardtreffertestsOverriding Default Hit Testing

Sie können ein visuelles Objekt Standardtreffertests überschreiben Unterstützung durch Überschreiben der HitTestCore Methode.You can override a visual object’s default hit testing support by overriding the HitTestCore method. Dies bedeutet, dass beim Aufrufen der HitTest -Methode, die überschriebene Implementierung von HitTestCore aufgerufen wird.This means that when you invoke the HitTest method, your overridden implementation of HitTestCore is called. Ihre überschriebene Methode wird aufgerufen, wenn sich ein Treffertest innerhalb des umgebenden Rechtecks für das visuelle Objekt befindet. Dies gilt auch dann, wenn die Koordinate außerhalb des gerenderten Inhalts des visuellen Objekts liegt.Your overridden method is called when a hit test falls within the bounding rectangle of the visual object, even if the coordinate falls outside the rendered content of the visual object.

// Override default hit test support in visual object.
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    Point pt = hitTestParameters.HitPoint;

    // Perform custom actions during the hit test processing,
    // which may include verifying that the point actually
    // falls within the rendered content of the visual.

    // Return hit on bounding rectangle of visual object.
    return new PointHitTestResult(this, pt);
}
' Override default hit test support in visual object.
Protected Overrides Overloads Function HitTestCore(ByVal hitTestParameters As PointHitTestParameters) As HitTestResult
    Dim pt As Point = hitTestParameters.HitPoint

    ' Perform custom actions during the hit test processing,
    ' which may include verifying that the point actually
    ' falls within the rendered content of the visual.

    ' Return hit on bounding rectangle of visual object.
    Return New PointHitTestResult(Me, pt)
End Function

Es kann vorkommen, dass Sie einen Treffertest sowohl für das umschließende Rechteck als auch für den gerenderten Inhalt eines visuellen Objekts durchführen möchten.There may be times when you want to hit test against both the bounding rectangle and the rendered content of a visual object. Mithilfe der PointHitTestParameters Parameterwert in die überschriebene HitTestCore Methode als Parameter an die Basismethode HitTestCore, können Sie Aktionen basierend auf einem Treffer für das umschließende Rechteck eines visuellen Objekts durchführen, und führen Sie dann einen zweiten Treffertest für das dargestellten Inhalte des visuellen Objekts.By using the PointHitTestParameters parameter value in your overridden HitTestCore method as the parameter to the base method HitTestCore, you can perform actions based on a hit of the bounding rectangle of a visual object, and then perform a second hit test against the rendered content of the visual object.

// Override default hit test support in visual object.
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
    // Perform actions based on hit test of bounding rectangle.
    // ...

    // Return results of base class hit testing,
    // which only returns hit on the geometry of visual objects.
    return base.HitTestCore(hitTestParameters);
}
' Override default hit test support in visual object.
Protected Overrides Overloads Function HitTestCore(ByVal hitTestParameters As PointHitTestParameters) As HitTestResult
    ' Perform actions based on hit test of bounding rectangle.
    ' ...

    ' Return results of base class hit testing,
    ' which only returns hit on the geometry of visual objects.
    Return MyBase.HitTestCore(hitTestParameters)
End Function

Siehe auchSee also