Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esse exemplo mostra como realizar um teste de hit em um objeto visual utilizando um Geometry como um parâmetro do teste de hit.
Exemplo
O exemplo a seguir mostra como configurar um teste de hit utilizando GeometryHitTestParameters para o método HitTest. O valor Point que é passado para o método OnMouseDown é utilizado para criar um objeto Geometry para expandir a faixa do teste de hit.
// 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();
}
}
A propriedade IntersectionDetail do GeometryHitTestResult oferece informação sobre os resultados de um teste de hit que utiliza um Geometry como um parâmetro de teste de hit. A seguinte ilustração mostra o relacionamento entre a geometria de teste de hit (o círculo azul) e o conteúdo renderizado do objeto visual de alvo (o quadrado vermelho).
Interseção entre a geometria de teste de hit e o objeto visual de alvo
.png)
O seguinte exemplo mostra como implementar um callback de teste de hit quando um Geometry é utilizado como parâmetro de teste de hit. O parâmetro result é passado em um GeometryHitTestResult para recuperar o valor da propriedade IntersectionDetail. O valor de propriedade permite que você determine se o parâmetro de teste de hit Geometry está completa ou parcialmente contido no conteúdo renderizado do alvo do teste de hit. Nesse caso, o código de exemplo só está acrescentando resultados do teste de hit à lista de visuais que estão completamente contidos nas fronteiras do alvo.
// 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;
}
}
Observação: |
|---|
O HitTestResult retorno de chamada não deve ser chamado quando o detalhe de interseção é Empty. |
Consulte também
Tarefas
Como: Hit Test Geometry in a Visual
Observação: