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