HitTestResult result = VisualTreeHelper.HitTest((UIElement)sender, pt); //获取鼠标点击到的可视对象
改成这样才行,你是根据sender得到的pt

解决方案 »

  1.   

    MSDN这个例子,也是和我写的差不多啊,也没有用Sender啊
      

  2.   

    MSDN这个例子,也是和我写的差不多啊,也没有用Sender啊
    你这里如果使用canvas1是不行的,因为你设置了Height和Width,却没有设置对其。
    如果你的canvas的HorizontalAlignment=Left 并且 VerticalAlignment设置为Top,才可以,因为在MSDN中canvas的布局在window中是全布局的,也就是说Canvas的坐标系统和Window的是完全符合的,Window的坐标是从左上角为(0,0)点的,所以你的Canvas加上左上对齐,就能符合Window的坐标系统了。
      

  3.   

    Point pt = e.GetPosition((UIElement)sender); //获得鼠标坐标
    HitTestResult result = VisualTreeHelper.HitTest(ellipse1, pt); //获取鼠标点击到的可视对象HitTest中的第一个参数不是你要命中的东西,而是你的点的所依赖的Visual视图。
    Point pt = e.GetPosition((UIElement)ellipse1); //获得鼠标坐标
    HitTestResult result = VisualTreeHelper.HitTest(ellipse1, pt); //获取鼠标点击到的可视对象
    这样的话,pt得到的是相对ellipse1的点,也就是按照ellipse1外围矩形的左上角点作为(0,0)点,这里pt都是相对的