Hit Result Behavior
<Window x:Class="WpfApplication1.HitTestExample" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WpfApplication1" Height="300" Width="300"> <Canvas x:Name="canvas1" MouseLeftButtonDown="OnMouseLeftButtonDown"> <Rectangle Canvas.Left="20" Canvas.Top="20" Width="100" Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> <Rectangle Canvas.Left="70" Canvas.Top="50" Width="100" Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> <Rectangle Canvas.Left="150" Canvas.Top="80" Width="100" Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> <Rectangle Canvas.Left="20" Canvas.Top="100" Width="50" Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> <Rectangle Canvas.Left="40" Canvas.Top="60" Width="50" Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> <Rectangle Canvas.Left="30" Canvas.Top="130" Width="50" Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" /> </Canvas> </Window> //File:Window.xaml.vb Imports System Imports System.Collections.Generic Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Shapes Namespace WpfApplication1 Public Partial Class HitTestExample Inherits Window Private hitList As New List(Of Rectangle)() Private hitArea As New EllipseGeometry() Public Sub New() InitializeComponent() End Sub Private Overloads Sub OnMouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) For Each rect As Rectangle In canvas1.Children rect.Fill = Brushes.Red Next Dim pt As Point = e.GetPosition(canvas1) hitArea = New EllipseGeometry(pt, 1.0, 1.0) hitList.Clear() VisualTreeHelper.HitTest(canvas1, Nothing, New HitTestResultCallback(AddressOf HitTestCallback), New GeometryHitTestParameters(hitArea)) If hitList.Count > 0 Then For Each rect As Rectangle In hitList rect.Fill = Brushes.Blue Next Console.WriteLine("You hit " & hitList.Count.ToString() & " rectangles.") End If End Sub Public Function HitTestCallback(result As HitTestResult) As HitTestResultBehavior Dim intersectionDetail__1 As IntersectionDetail = DirectCast(result, GeometryHitTestResult).IntersectionDetail Select Case intersectionDetail__1 Case IntersectionDetail.FullyContains hitList.Add(DirectCast(result.VisualHit, Rectangle)) Return HitTestResultBehavior.[Continue] Case IntersectionDetail.Intersects Return HitTestResultBehavior.[Continue] Case IntersectionDetail.FullyInside Return HitTestResultBehavior.[Continue] Case Else Return HitTestResultBehavior.[Stop] End Select End Function End Class End Namespace