Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
In questo esempio viene illustrato come eseguire un hit test su un oggetto visivo utilizzando un Geometry come parametro di hit test.
Esempio
Nell'esempio seguente viene mostrato come configurare un hit test utilizzando GeometryHitTestParameters per il metodo HitTest. Il valore Point passato al metodo OnMouseDown viene utilizzato per creare un oggetto Geometry al fine di espandere l'intervallo dell'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();
}
}
La proprietà IntersectionDetail di GeometryHitTestResult fornisce informazioni sui risultati di un hit test che utilizza Geometry come parametro. Di seguito è illustrata la relazione tra la geometria dell'hit test, vale a dire il cerchio blu, e il contenuto sottoposto a rendering dell'oggetto visivo di destinazione, ovvero il quadrato rosso.
Intersezione tra geometria dell'hit test e oggetto visivo di destinazione
.png)
Nell'esempio seguente viene illustrato come implementare un callback dell'hit test se come parametro di hit test si utilizza Geometry. Viene eseguito il cast del parametro result a GeometryHitTestResult per recuperare il valore della proprietà IntersectionDetail. Il valore della proprietà consente di determinare se il parametro di hit test Geometry è contenuto completamente o parzialmente all'interno del contenuto della destinazione dell'hit test di cui è stato eseguito il rendering. In questo caso, il codice di esempio aggiunge all'elenco solo i risultati dell'hit test relativi agli elementi visivi contenuti completamente all'interno del limite della destinazione.
// 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;
}
}
Nota
Il callback HitTestResult non deve essere chiamato quando il dettaglio dell'intersezione è Empty.
Vedere anche
Attività
Procedura: eseguire un hit test della geometria in un oggetto Visual