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 composto de um ou mais objetos Geometry.
Exemplo
O exemplo a seguir mostra como recuperar o DrawingGroup de um objeto vidual que utiliza o método GetDrawing. Um teste de hit é então realizado no conteúdo renderizado de cada desenho no DrawingGroup para determinar qual geometria recebeu o hit.
Observação: |
|---|
Na maioria dos casos, você poderia usar o HitTest método para determinar se um ponto de intercepta qualquer conteúdo processado de um visual. |
// Determine if a geometry within the visual was hit.
static public void HitTestGeometryInVisual(Visual visual, Point pt)
{
// Retrieve the group of drawings for the visual.
DrawingGroup drawingGroup = VisualTreeHelper.GetDrawing(visual);
EnumDrawingGroup(drawingGroup, pt);
}
// Enumerate the drawings in the DrawingGroup.
static public void EnumDrawingGroup(DrawingGroup drawingGroup, Point pt)
{
DrawingCollection drawingCollection = drawingGroup.Children;
// Enumerate the drawings in the DrawingCollection.
foreach (Drawing drawing in drawingCollection)
{
// If the drawing is a DrawingGroup, call the function recursively.
if (drawing.GetType() == typeof(DrawingGroup))
{
EnumDrawingGroup((DrawingGroup)drawing, pt);
}
else if (drawing.GetType() == typeof(GeometryDrawing))
{
// Determine whether the hit test point falls within the geometry.
if (((GeometryDrawing)drawing).Geometry.FillContains(pt))
{
// Perform action based on hit test on geometry.
}
}
}
}
O método FillContains é um método sobrecarregado que permite que você faça teste de hit utilizando um Point ou Geometry especificado. Se uma geometria tem traço, o traço pode estender para fora dos limites de preenchimento. Nesse caso, você pode quere chamar StrokeContains além de FillContains.
Você também pode fornecer um ToleranceType que e utilizado para ajuste de Bézier.
Observação: |
|---|
Esse exemplo não considera quaisquer transformações ou clipping que possam ser aplicados à geometria. Além disso, esse exemplo não funcionará com um controle com estilo, pois não tem desenhos diretamente associados a ele. |
Consulte também
Tarefas
Como: Hit Test Using Geometry as a Parameter
Observação: