方法: パラメーターとしてジオメトリを使用してヒット テストを実行するHow to: Hit Test Using Geometry as a Parameter

この例を使用して、ビジュアル オブジェクトに対してヒット テストを実行する方法を示しています、Geometryヒット テスト パラメーター。This example shows how to perform a hit test on a visual object using a Geometry as a hit test parameter.

Example

次の例を使用してヒット テストを設定する方法を示しています。GeometryHitTestParametersの、HitTestメソッド。The following example shows how to set up a hit test using GeometryHitTestParameters for the HitTest method. Pointに渡される値、OnMouseDownメソッドの使用を作成、Geometryヒット テストの範囲を拡張するためにオブジェクト。The Point value that is passed to the OnMouseDown method is used to create a Geometry object in order to expand the range of the hit test.

// 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();
    }
}
' 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

IntersectionDetailプロパティのGeometryHitTestResultを使用するヒット テストの結果に関する情報を提供します、Geometryヒット テスト パラメーター。The IntersectionDetail property of GeometryHitTestResult provides information about the results of a hit test that uses a Geometry as a hit test parameter. ヒット テストのジオメトリ (青い円) と対象のビジュアル オブジェクト (赤い正方形) の描画されるコンテンツとの関係を次の図に示します。The following illustration shows the relationship between the hit test geometry (the blue circle) and the rendered content of the target visual object (the red square).

ヒット テストに使用される IntersectionDetail を示す図。

次の例は、ヒット テスト コールバックを実装する方法を示しています。 ときに、Geometryヒット テスト パラメーターとして使用されます。The following example shows how to implement a hit test callback when a Geometry is used as a hit test parameter. resultにパラメーターをキャスト、GeometryHitTestResultの値を取得するために、IntersectionDetailプロパティ。The result parameter is cast to a GeometryHitTestResult in order to retrieve the value of the IntersectionDetail property. プロパティの値を使用するかどうか、Geometryヒット テスト パラメーター完全または部分的に含まれるヒット テスト対象の表示内容。The property value allows you to determine if the Geometry hit test parameter is fully or partially contained within the rendered content of the hit test target. ここに示すサンプル コードでは、完全に対象の境界内に含まれるビジュアルについてのみ、ヒット テストの結果をリストに追加しています。In this case, the sample code is only adding hit test results to the list for visuals that are fully contained within the target boundary.

// 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;
    }
}
' 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

注意

HitTestResult 、Intersectiondetail がときに、コールバックを呼び出すことはできませんEmptyします。The HitTestResult callback should not be called when the intersection detail is Empty.

関連項目See also