ビジュアル層でのヒット テストHit Testing in the Visual Layer

ここでは、ビジュアル層で提供されるヒット テスト機能の概要について説明します。This topic provides an overview of hit testing functionality provided by the visual layer. ヒット テストのサポートでは、geometry 型またはポイントの値の表示内容内かどうかを確認することができます、 Visual、複数のオブジェクトを選択する四角形を描くなどのユーザー インターフェイスの動作を実装することができます。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.

ヒット テストのシナリオHit Testing Scenarios

UIElementクラスを提供、InputHitTestメソッドで、指定された座標の値を使用して、要素に対してヒット テストすることができます。The UIElement class provides the InputHitTest method, which allows you to hit test against an element using a given coordinate value. 多くの場合、InputHitTest要素のテストのヒットを実装するメソッドが必要な機能を提供します。In many cases, the InputHitTest method provides the desired functionality for implementing hit testing of elements. ただし、ビジュアル層でのヒット テストを実装する必要があるシナリオもいくつか存在します。However, there are several scenarios in which you may need to implement hit testing at the visual layer.

  • 非に対するヒット テストUIElementオブジェクト: これ以外のテストがヒットする場合に当てはまりますUIElementなどのオブジェクトDrawingVisualまたはグラフィックス オブジェクト。Hit testing against non-UIElement objects: This applies if you are hit testing non-UIElement objects, such as DrawingVisual or graphics objects.

  • ジオメトリを使用したヒット テスト: ポイントの座標値ではなくジオメトリ オブジェクトを使用してヒット テストを行う必要がある場合に適用されます。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.

  • 複数のオブジェクトに対するヒット テスト: 重なっているオブジェクトなどの複数のオブジェクトに対してヒット テストを行う必要がある場合に適用されます。Hit testing against multiple objects: This applies when you need to hit test against multiple objects, such as overlapping objects. 最初のビジュアルだけでなく、ジオメトリまたはポイントと交差するすべてのビジュアルの結果を取得できます。You can get results for all visuals intersecting a geometry or point, not just the first one.

  • 無視UIElementヒット テスト ポリシー: を無視する必要がある場合にこれが適用されます、UIElementヒット テスト ポリシーで、要素が無効になっているかどうかまたは非表示としてなどの条件を考慮します。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.

注意

ビジュアル層でのテスト ヒットを示すコード サンプル全体については、「DrawingVisuals を使用したヒット テストのサンプル」と「Win32 相互運用によるヒット テストのサンプル」を参照してください。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.

ヒット テストのサポートHit Testing Support

目的、HitTest内のメソッド、VisualTreeHelperクラスは、geometry 型またはポイント座標の値がコントロールのグラフィック要素など、特定のオブジェクトの描画された内容内かどうかを決定します。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. たとえば、ヒット テストを使用することで、オブジェクトの外接する四角形内でのマウス クリックが、円のジオメトリ内にあるかどうかを確認できます。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. また、ヒット テストの既定の実装をオーバーライドして、独自のカスタム ヒット テスト計算を実行することもできます。You can also choose to override the default implementation of hit testing to perform your own custom hit test calculations.

四角形以外のオブジェクトの領域と外接する四角形の関係を次の図に示します。The following illustration shows the relationship between a non-rectangular object's region and its bounding rectangle.

有効なヒット テスト領域のダイアグラムDiagram of valid hit test region
有効なヒット テスト領域のダイアグラムDiagram of valid hit test region

ヒット テストと z オーダーHit Testing and Z-Order

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) のビジュアル層は、最上位のオブジェクトだけでなく、ポイントまたはジオメトリの下にあるすべてのオブジェクトに対するヒット テストをサポートします。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. 結果は z オーダーで返されます。Results are returned in z-order. ただし、ビジュアル オブジェクトをパラメーターとして渡す、HitTestのどの部分を決定するメソッドがヒットするビジュアル ツリーのテストします。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. ヒット テストは、ビジュアル ツリー全体またはその一部に対して実行できます。You can hit test against the entire visual tree, or any portion of it.

次の図では、四角形と三角形の両方のオブジェクト上に円オブジェクトがあります。In the following illustration, the circle object is on top of both the square and triangle objects. ヒット z オーダー値がある最上位のビジュアル オブジェクトをテストに興味のみ場合は、返されるビジュアル ヒット テスト列挙型を設定できますStopから、HitTestResultCallbackを最初の項目の後にヒット テストの検査を停止します。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.

Z のダイアグラム-ビジュアル ツリーの順序Diagram of the z-order of a visual tree
ビジュアル ツリーの z オーダーのダイアグラムDiagram of the z-order of a visual tree

特定の時点または geometry 下にあるすべてのビジュアル オブジェクトを列挙する場合は、返すContinueから、HitTestResultCallbackです。If you want to enumerate all visual objects under a specific point or geometry, return Continue from the HitTestResultCallback. つまり、完全に隠されているものも含めて、他のオブジェクトの下にあるすべてのビジュアル オブジェクトに対してヒット テストを行うことができます。This means you can hit test for visual objects that are beneath other objects, even if they are wholly obscured. 詳細については、「ヒット テスト結果のコールバックの使用」のサンプル コードを参照してください。See the sample code in the section "Using a Hit Test Results Callback" for more information.

注意

透明なビジュアル オブジェクトのヒット テストも実行できます。A visual object that is transparent can also be hit test.

既定のヒット テストの使用Using Default Hit Testing

ポイントを使用してビジュアル オブジェクトのジオメトリ内かどうかを識別することができます、 HitTest visual オブジェクトと、ポイント座標と比較する値を指定します。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. ビジュアル オブジェクトのパラメーターは、ヒット テストの検索のためのビジュアル ツリー内の開始点を識別します。The visual object parameter identifies the starting point in the visual tree for the hit test search. 設定されているジオメトリには、目的の座標が含まれています。 ビジュアル ツリーで visual オブジェクトが見つかった場合、VisualHitのプロパティ、HitTestResultオブジェクト。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. HitTestResultからは返され、HitTestメソッドです。The HitTestResult is then returned from the HitTest method. ポイントがヒット テストは visual のサブツリーに含まれていない場合HitTest返しますnullです。If the point is not contained with the visual sub-tree you are hit testing, HitTest returns null.

注意

既定のヒット テストでは、常に z オーダーで最上位のオブジェクトが返されます。Default hit testing always returns the top-most object in the z-order. 部分的または完全に隠されているものも含めて、すべてのビジュアル オブジェクトを識別するには、ヒット テストの結果のコールバックを使用します。In order to identify all visual objects, even those that may be partly or wholly obscured, use a hit test result callback.

座標の値のポイントのパラメーターとして渡す、HitTestへの座標空間に対するテストがヒットしたビジュアル オブジェクトの相対的なメソッドには。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. たとえば、入れ子になったビジュアル オブジェクトが親の座標空間の (100, 100) に定義されている場合、(0, 0) での子のビジュアルのヒット テストは、親の座標空間の (100, 100) でのヒット テストと同じになります。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.

次のコードのマウス イベントのハンドラーを設定する方法を示しています、UIElementヒット テストのためのイベントをキャプチャするために使用できるオブジェクト。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

ヒット テストに対するビジュアル ツリーの影響How the Visual Tree Affects Hit Testing

ビジュアル ツリー内の開始点によって、ヒット テストによるオブジェクトの列挙時に返されるオブジェクトが決定されます。The starting point in the visual tree determines which objects are returned during the hit test enumeration of objects. ヒット テストの対象となるオブジェクトが複数存在する場合、ビジュアル ツリー内の開始点として使用されるビジュアル オブジェクトは、対象となるすべてのオブジェクトの共通の先祖である必要があります。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. たとえば、次の図のボタン要素と描画ビジュアルの両方のヒット テストを行う場合、ビジュアル ツリー内の開始点を、その両方の共通の先祖に設定する必要があります。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 this case, the canvas element is the common ancestor of both the button element and the drawing visual.

ビジュアル ツリー階層のダイアグラムDiagram of a visual tree hierarchy
ビジュアル ツリー階層のダイアグラムDiagram of a visual tree hierarchy

注意

IsHitTestVisibleプロパティを取得またはを宣言する値を設定するかどうか、 UIElement-、表示される内容の一部から派生したオブジェクトがヒット テストの結果として返される可能性のあることができます。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. これにより、ビジュアル ツリーを選択的に変更し、ヒット テストの対象となるビジュアル オブジェクトを決定することができます。This allows you to selectively alter the visual tree to determine which visual objects are involved in a hit test.

ヒット テスト結果のコールバックの使用Using a Hit Test Result Callback

ジオメトリに指定した座標値が含まれるビジュアル ツリーのすべてのビジュアル オブジェクトを列挙できます。You can enumerate all visual objects in a visual tree whose geometry contains a specified coordinate value. これにより、他のビジュアル オブジェクトによって部分的または完全に隠されているものも含めて、すべてのビジュアル オブジェクトを識別することができます。This allows you to identify all visual objects, even those that may be partly or wholly obscured by other visual objects. ビジュアル ツリーを使用してビジュアル オブジェクトを列挙する、HitTestヒット テストのコールバック関数を持つメソッドです。To enumerate visual objects in a visual tree use the HitTest method with a hit test callback function. ヒット テスト コールバック関数は、指定した座標値がビジュアル オブジェクトに含まれている場合にシステムによって呼び出されます。The hit test callback function is called by the system when the coordinate value you specify is contained in a visual object.

ヒット テストの結果の列挙時には、ビジュアル ツリーを変更する操作を実行しないでください。During the hit test results enumeration, you should not perform any operation that modifies the visual tree. 走査中のビジュアル ツリーに対してオブジェクトの追加または削除を行うと、予測不可能な動作を招く可能性があります。Adding or removing an object from the visual tree while it is being traversed can result in unpredictable behavior. 安全に後のビジュアル ツリーを変更することができます、HitTestメソッドを返します。You can safely modify the visual tree after the HitTest method returns. など、データ構造を提供することも、 ArrayList、ヒット テスト結果の列挙中に値を格納します。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

ヒット テストのコールバック メソッドは、ビジュアル ツリーの特定のビジュアル オブジェクトでヒット テストが識別されたときに、ユーザーが実行するアクションを定義します。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. 操作を実行した後に戻す、HitTestResultBehaviorを他のビジュアル オブジェクトの列挙を続行するかどうかを決定する値。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

注意

ヒットしたビジュアル オブジェクトの列挙の順序は、z オーダー順です。The order of enumeration of hit visual objects is by z-order. z オーダーの最上位のビジュアル オブジェクトが最初に列挙されます。The visual object at the top-most z-order level is the first object enumerated. その他のビジュアル オブジェクトは、z オーダーの上位から順に列挙されます。Any other visual objects enumerated are at decreasing z-order level. この列挙の順序は、ビジュアルの描画順序に対応します。This order of enumeration corresponds to the rendering order of the visuals.

ヒット テストのコールバック関数でいつでもビジュアル オブジェクトの列挙を停止するには、返すを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

ヒット テスト フィルターのコールバックの使用Using a Hit Test Filter Callback

オプションのヒット テスト フィルターを使用して、ヒット テストの結果に渡されるオブジェクトを制限できます。You can use an optional hit test filter to restrict the objects that are passed on to the hit test results. これにより、ヒット テストの結果でビジュアル ツリーの一部を処理する必要がない場合、その部分を無視できます。This allows you to ignore parts of the visual tree that you are not interested in processing in your hit test results. ヒット テスト フィルターを実装するヒット テスト フィルターのコールバック関数を定義して呼び出すときにパラメーター値として渡す、、HitTestメソッドです。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

省略可能なヒット テスト フィルターのコールバック関数を指定しない場合、nullとそのパラメーターの値、HitTestメソッドです。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.

ヒット テスト フィルターを使用したビジュアル ツリーの簡略化Pruning a visual tree using a hit test filter
ビジュアル ツリーの簡略化Pruning a visual tree

ヒット テスト フィルターのコールバック関数を使用すると、描画されるコンテンツに指定した座標が含まれるすべてのビジュアルを列挙できます。The hit test filter callback function allows you to enumerate through all the visuals whose rendered content contains the coordinates you specify. ただし、ヒット テストの結果のコールバック関数で、ビジュアル ツリーの一部の分岐を処理する必要がない場合、これらの分岐を無視できます。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. ヒット テスト フィルターのコールバック関数の戻り値によって、ビジュアル オブジェクトの列挙体が実行するアクションの種類が決定されます。The return value of the hit test filter callback function determines what type of action the enumeration of the visual objects should take. たとえば、次の値を返すContinueSkipSelfAndChildren、ヒット テスト結果の列挙体から現在の visual オブジェクトとその子を削除することができます。For example, if you return the value, ContinueSkipSelfAndChildren, you can remove the current visual object and its children from the hit test results enumeration. つまり、ヒット テストの結果のコールバック関数は、列挙体でこれらのオブジェクトを認識しなくなります。This means that the hit test results callback function will not see these objects in its enumeration. オブジェクトのビジュアル ツリーから余分なものを取り除くと、ヒット テストの結果の列挙体が渡されるときの処理を減らすことができます。Pruning the visual tree of objects decreases the amount of processing during the hit test results enumeration pass. 次のコード例では、フィルターはラベルとその子孫をスキップし、他のすべてのヒット テストを行います。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

注意

ヒット テスト フィルターのコールバックは、ヒット テストの結果のコールバックが呼び出されない場合に呼び出されることがあります。The hit test filter callback will sometimes be called in cases where the hit test results callback is not called.

既定のヒット テストのオーバーライドOverriding Default Hit Testing

オーバーライドすることでサポートをテストしてビジュアル オブジェクトの既定のヒットをオーバーライドすることができます、HitTestCoreメソッドです。You can override a visual object’s default hit testing support by overriding the HitTestCore method. つまりを呼び出すときは、HitTestメソッドは、のオーバーライドされた実装HitTestCoreと呼びます。This means that when you invoke the HitTest method, your overridden implementation of HitTestCore is called. 座標がビジュアル オブジェクトの描画されるコンテンツの外側にあっても、ビジュアル オブジェクトの外接する四角形内でヒット テストが実行されると、オーバーライドされたメソッドが呼び出されます。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

ビジュアル オブジェクトの外接する四角形と描画されるコンテンツの両方に対してヒット テストを行う必要が生じる場合もあります。There may be times when you want to hit test against both the bounding rectangle and the rendered content of a visual object. 使用して、 PointHitTestParameters 、オーバーライドのパラメーター値HitTestCore基本メソッドにパラメーターとしてメソッドHitTestCore、ビジュアル オブジェクトの外接する四角形のヒットに基づいてアクションを実行してに対して 2 つ目のヒット テストを実行しますビジュアル オブジェクトのコンテンツをレンダリングします。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

関連項目See Also

HitTest
HitTestResult
HitTestResultCallback
HitTestFilterCallback
IsHitTestVisible
ヒット テスト DrawingVisuals サンプルの使用Hit Test Using DrawingVisuals Sample
ヒット テストの Win32 相互運用性サンプルHit Test with Win32 Interoperation Sample
ビジュアル内のジオメトリのヒット テストを実行するHit Test Geometry in a Visual
Win32 ホスト コンテナーを使用してヒット テストを実行するHit Test Using a Win32 Host Container