查询命中测试

时间:2014-09-08 13:12:36

标签: wpf

我是WPF的新手。我希望在画布中有几种不同的形状,然后根据用户右键单击的形状显示不同的上下文菜单。我目前正在尝试只有一个形状,一个画布内的矩形。我想到的是,在右键单击的处理程序中,我应该对矩形进行命中测试。如果它回来了,我会显示这个形状的上下文菜单。但它不起作用。如何检测到右键单击矩形内部而不是画布上的其他位置?

XAML:

<Canvas Grid.Column ="2" Name="canvas" Background="Transparent" RightButtonDown="show_context_menu" >
    <Rectangle Name="myrectangle"  Width="1000" Height="500"  Fill="LightSteelBlue"             Stroke="Black" StrokeThickness="4" Canvas.Left="10" Canvas.Top="100"/>
</Canvas>

C#:

private void show_context_menu(object sender, MouseButtonEventArgs e)
{
            Point pt = e.GetPosition((UIElement)sender);
            HitTestResult result = VisualTreeHelper.HitTest(myrectangle, pt);
            if (result != null)
            {
                ContextMenu cm = cmCanvas as ContextMenu; 
                cm.PlacementTarget = sender as Canvas; 
                cm.IsOpen = true;
            }
}

1 个答案:

答案 0 :(得分:0)

问题是你是 计算相对于画布的点并将视觉传递为矩形 。 计算相对于myrectangle的点,并在HitTest方法中传递它:

Point pt = e.GetPosition(myrectangle);
HitTestResult result = VisualTreeHelper.HitTest(myrectangle, pt);
if (result != null)
{
   .......
}