【问题标题】:Query about hit testing查询命中测试
【发布时间】:2014-09-08 13:12:35
【问题描述】:

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

【问题讨论】:

    标签: wpf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多