Hit Result Behavior : Mouse « Windows Presentation Foundation « C# / CSharp Tutorial






<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.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<Rectangle> hitList = new List<Rectangle>();
        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;
            }
        }
    }
}
WPF Hit Result Behavior








24.123.Mouse
24.123.1.A line which monitors the mouse entering its areaA line which monitors the mouse entering its area
24.123.2.Respond When the User Rotates the Mouse WheelRespond When the User Rotates the Mouse Wheel
24.123.3.Mouse Position and TranslateTransformMouse Position and TranslateTransform
24.123.4.Mouse PositionMouse Position
24.123.5.Detect whether the mouse button is pressed or released using the MouseButtonState property.Detect whether the mouse button is pressed or released using the MouseButtonState property.
24.123.6.Handler MouseLeftButtonDown and MouseLeftButtonUp eventsHandler MouseLeftButtonDown and MouseLeftButtonUp events
24.123.7.Mouse Enter and leave a BorderMouse Enter and leave a Border
24.123.8.Make an object follow the mouse pointer as it moves on the screen.Make an object follow the mouse pointer as it moves on the screen.
24.123.9.Use Mouse.AddPreviewMouseDownHandler(myEllipse, PreviewMouseDownEllipse);Use Mouse.AddPreviewMouseDownHandler(myEllipse, PreviewMouseDownEllipse);
24.123.10.Use Mouse.AddMouseDownHandler(myEllipse, MouseDownEllipse);Use Mouse.AddMouseDownHandler(myEllipse, MouseDownEllipse);
24.123.11.Use Mouse.PreviewMouseDown /Mouse.MouseDown Attribute from Grid elementUse Mouse.PreviewMouseDown /Mouse.MouseDown Attribute from Grid element
24.123.12.Grid MouseMoveGrid MouseMove
24.123.13.Grid MouseLeftButtonDownGrid MouseLeftButtonDown
24.123.14.Grid MouseLeftButtonUpGrid MouseLeftButtonUp
24.123.15.UI Element Mouse Clicked EventsUI Element Mouse Clicked Events
24.123.16.Handles the MouseDown event on the CanvasHandles the MouseDown event on the Canvas
24.123.17.Handles the MouseDown event on the UniformGridHandles the MouseDown event on the UniformGrid
24.123.18.Mouse cursor override and clearMouse cursor override and clear
24.123.19.Check the mouse event sourceCheck the mouse event source
24.123.20.Use the Mouse Wheel action methods that are defined by the IScrollInfo interfaceUse the Mouse Wheel action methods that are defined by the IScrollInfo interface
24.123.21.Mouse.LostMouseCaptureEventMouse.LostMouseCaptureEvent
24.123.22.Use Mouse.Capture to let a Control capture an eventUse Mouse.Capture to let a Control capture an event
24.123.23.Capture Mouse EllipseCapture Mouse Ellipse
24.123.24.Get mouse position with Mouse.GetPositionGet mouse position with Mouse.GetPosition
24.123.25.Point Hit TestPoint Hit Test
24.123.26.Replease mouse with Mouse.Capture(null)Replease mouse with Mouse.Capture(null)
24.123.27.Hit Result BehaviorHit Result Behavior
24.123.28.Get mouse clicked position as Point class
24.123.29.Get mouse clicked position with MouseButtonEventArgs.GetPosition