Nasıl yapılır: Geometriyi Parametre Olarak Kullanan Tıklama Testi
Bu örnek, bir isabet testi parametresi olarak kullanarak bir görsel nesnesi üzerinde bir isabet testinin nasıl gerçekleştirileceğini gösterir Geometry .
Örnek
Aşağıdaki örnek, yöntemi için kullanarak bir isabet testinin nasıl ayarlanacağını gösterir GeometryHitTestParameters HitTest . PointYöntemine geçirilen değer, OnMouseDown Geometry isabet testinin aralığını genişletmek için bir nesne oluşturmak için kullanılır.
// 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
Özelliği, bir isabet testi IntersectionDetail GeometryHitTestResult parametresi olarak kullanan bir isabet testinin sonuçlarıyla ilgili bilgiler sağlar Geometry . Aşağıdaki çizimde, hedef görsel nesnesinin (kırmızı kare) isabet testi geometrisi (mavi daire) ve işlenmiş içeriği arasındaki ilişki gösterilmektedir.

Aşağıdaki örnek, bir Geometry isabet testi parametresi olarak kullanıldığında bir isabet testi geri çağrısının nasıl uygulanacağını gösterir. resultParametresi, GeometryHitTestResult özelliğin değerini almak için bir olarak öğesine dönüştürüldü IntersectionDetail . Özellik değeri, isabet sınama Geometry parametresinin, isabet testi hedefinin işlenmiş içeriği içinde tam mı yoksa kısmen mi olduğunu belirlemenizi sağlar. Bu durumda, örnek kod yalnızca hedef sınırın içinde tam olarak bulunan görsellerin listesine vuruş testi sonuçları ekler.
// 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
Not
HitTestResultKesişim ayrıntısı olduğunda geri çağırma çağrılmamalıdır Empty .