void canvas1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { int ClickMargin = 2;// Adjust here as desired. Span is in both directions of selected point. var ClickMarginPointList = new Collection<Point>(); Point ClickedPoint = e.GetPosition(canvas1); Point ClickMarginPoint=new Point(); for (int x = -1 * ClickMargin; x <= ClickMargin; x++) { for (int y = -1 * ClickMargin; y <= ClickMargin; y++) { ClickMarginPoint.X = ClickedPoint.X + x; ClickMarginPoint.Y = ClickedPoint.Y + y; ClickMarginPointList.Add(ClickMarginPoint); } } foreach (Point p in ClickMarginPointList) { HitTestResult SelectedCanvasItem = System.Windows.Media.VisualTreeHelper.HitTest(canvas1, p); if (SelectedCanvasItem.VisualHit.GetType().BaseType == typeof(Shape)) { var SelectedShapeTag = SelectedCanvasItem.VisualHit.GetValue(Shape.TagProperty); if (SelectedShapeTag!=null && SelectedShapeTag.GetType().BaseType == typeof(Hole)) { Hole SelectedHole = (Hole)SelectedShapeTag; SetActivePattern(SelectedHole.ParentPattern); SelectedHole.ParentPattern.CurrentHole = SelectedHole; return; //Get out, we're done. } } } }>