WPF C# Tutorial

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="WpfApplication1" Height="300" Width="300">
      MouseLeftButtonDown="OnMouseLeftButtonDown">
          Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
          Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
          Height="60" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
          Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
          Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
          Height="50" Stroke="Black" Fill="LightBlue" Opacity="0.7" />
  

//File:Window.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WpfApplication1
{
    public partial class HitTestExample : Window
    {
        private List hitList = new List();
        private EllipseGeometry hitArea = new EllipseGeometry();
        public HitTestExample()
        {
            InitializeComponent();
        }
        private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            foreach (Rectangle rect in canvas1.Children)
            {
                rect.Fill = Brushes.Red;
            }
            Point pt = e.GetPosition(canvas1);
            hitArea = new EllipseGeometry(pt, 1.0, 1.0);
            hitList.Clear();
            VisualTreeHelper.HitTest(canvas1, null,new HitTestResultCallback(HitTestCallback),new GeometryHitTestParameters(hitArea));
            if (hitList.Count > 0)
            {
                foreach (Rectangle rect in hitList)
                {
                    rect.Fill = Brushes.Blue;
                }
                Console.WriteLine("You hit " + hitList.Count.ToString() + " rectangles.");
            }
        }
        public HitTestResultBehavior HitTestCallback(HitTestResult result)
        {
            IntersectionDetail intersectionDetail = ((GeometryHitTestResult)result).IntersectionDetail;
            switch (intersectionDetail)
            {
                case IntersectionDetail.FullyContains:
                    hitList.Add((Rectangle)result.VisualHit);
                    return HitTestResultBehavior.Continue;
                case IntersectionDetail.Intersects:
                    return HitTestResultBehavior.Continue;
                case IntersectionDetail.FullyInside:
                    return HitTestResultBehavior.Continue;
                default:
                    return HitTestResultBehavior.Stop;
            }
        }
    }
}