Mega Code Archive

 
Categories / C# / WPF
 

Point Hit Test

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