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;
}
}
}
}