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