Point Hit Test

image_pdfimage_print


   
  
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:d="http://schemas.microsoft.com/expression/interactivedesigner/2006"
  mc:Ignorable="d"
  x:Class="InputExamples.PointHitTest" 
  Width="640" Height="480">

  <Window.Resources>
    <Storyboard x:Key="OnLoaded"/>
  </Window.Resources>

  <Window.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
      <BeginStoryboard x:Name="OnLoaded_BeginStoryboard" Storyboard="{DynamicResource OnLoaded}"/>
    </EventTrigger>
  </Window.Triggers>
    <StackPanel>   
  <Rectangle Fill="Red"  Width="200" Height="200" x:Name="RectangleArea"/>
  <Label d:LayoutOverrides="Height"  Width="Auto" Height="28" x:Name="HitLabel" Content="Label"/>
    </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.IO;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;

namespace InputExamples
{
  public partial class PointHitTest
  {
    private string hitStatus;
    
    public PointHitTest()
    {
      this.InitializeComponent();
    }
    
    protected override void OnInitialized(EventArgs e)
    {
      base.OnInitialized(e);
      
      CompositionTarget.Rendering += this.CompositionTarget_Rendering;
    }

    private void CompositionTarget_Rendering(object sender, EventArgs e)
    {
         Point position = Mouse.GetPosition(RectangleArea);
          
      hitStatus = "no hit";
      
      VisualTreeHelper.HitTest(RectangleArea,null,
              new HitTestResultCallback(HitTestResultHandler),
              new PointHitTestParameters(position)
      );
      this.HitLabel.Content = String.Format("Result of the hit test: {0}", hitStatus);
    }
    
    public HitTestResultBehavior HitTestResultHandler(HitTestResult result)
    {
      PointHitTestResult hitResult = (PointHitTestResult)result;
      
      hitStatus = String.Format("{0} was hit at this point: {1}", 
        ((FrameworkElement)hitResult.VisualHit).Name, 
        hitResult.PointHit.ToString()
      );
         return HitTestResultBehavior.Continue;
    }
  }
}