Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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