C# 如何在图像(WPF)中的图像上绘制点,运行时带有事件

C# 如何在图像(WPF)中的图像上绘制点,运行时带有事件,c#,wpf,draw,C#,Wpf,Draw,我有以下问题:我正在WPF中使用Image组件。我加载我的图像,这是我的地图。我想做一个按钮,如果我点击,我将被允许点击我的地图并画一个点。该点应该是“唯一的”,因此它应该记住坐标/描述(我将把它存储在数据库中)。 坐标只能从该图像中读取,而不能从整个表单中读取。 创建点后,我需要OnMouseClick事件 我应该用什么/读什么来做到这一点 画布允许您使用左/顶坐标放置对象 您需要将画布精确地放置在与图像尺寸相同的图像上 要实现这一点,您应该使用网格,因为它允许控件相互堆叠 您可以使用Mous

我有以下问题:我正在WPF中使用
Image
组件。我加载我的
图像
,这是我的
地图
。我想做一个
按钮
,如果我点击,我将被允许点击我的
地图
并画一个点。该点应该是“唯一的”,因此它应该记住坐标/描述(我将把它存储在数据库中)。 坐标只能从该图像中读取,而不能从整个表单中读取。 创建点后,我需要
OnMouseClick
事件

我应该用什么/读什么来做到这一点

  • 画布允许您使用左/顶坐标放置对象
  • 您需要将画布精确地放置在与图像尺寸相同的图像上
  • 要实现这一点,您应该使用网格,因为它允许控件相互堆叠
  • 您可以使用
    MouseLeftButtonDown
    事件处理程序中的
    e.GetPosition()
    获取鼠标单击坐标。由于画布覆盖了图像,所以您将根据图像进行协调

    <Grid>
        <Image x:Name="MapImg"  Source="img/map.gif" Stretch="Fill" MouseLeftButtonDown="Image_MouseLeftButtonDown_1"/>
        <Canvas x:Name="Cnv"/>
    </Grid>
    
     private void Image_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
        {  
            Ellipse ellipse = new Ellipse();
            ellipse.Fill = Brushes.Sienna;
            ellipse.Width = 100;
            ellipse.Height = 100 ;
            ellipse.StrokeThickness = 2;
    
            Cnv.Children.Add(ellipse);
    
            Canvas.SetLeft(ellipse, e.GetPosition(MapImg).X);
            Canvas.SetTop(ellipse, e.GetPosition(MapImg).Y);            
        }
    
    
    私有无效图像_MouseLeftButtonDown_1(对象发送器,MouseButtonEventArgs e)
    {  
    椭圆=新椭圆();
    椭圆。填充=画笔。锡耶纳;
    椭圆。宽度=100;
    椭圆,高度=100;
    椭圆.StrokeThickness=2;
    Cnv.Children.Add(椭圆);
    SetLeft(椭圆,e.GetPosition(MapImg.X);
    SetTop(椭圆,e.GetPosition(MapImg.Y);
    }
    

  • 我刚刚添加了
    GetPosition(canvas)
    ,效果非常好:)谢谢你的回答。是的,@Marox comment让它工作了。由于某些原因,
    e.GetPosition(MapImg)
    不起作用,我看到它返回的值与
    e.GetPosition(Cnv)
    相同。嗯,我想是奇怪的WPF