我是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;
}
}
答案 0 :(得分:0)
问题是你是 计算相对于画布的点并将视觉传递为矩形 。 计算相对于myrectangle的点,并在HitTest方法中传递它:
Point pt = e.GetPosition(myrectangle);
HitTestResult result = VisualTreeHelper.HitTest(myrectangle, pt);
if (result != null)
{
.......
}