今天做项目时,想要获取Canvas中的一个Image控件的相对坐标。发现获取到鼠标按下的坐标值总是对不上。经过反复的尝试,发现Image控件的Source是否为空会对获取坐标的结果有影响。举个例子吧,在Grid中放置一个Canvas,在后台代码中添加一个image控件。
xaml
xaml.cs
先把image.Source源注释掉
////// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { Image image; public MainWindow() { InitializeComponent(); image = new Image(); image.Width = 100; image.Height = 100; //image.Source = new BitmapImage(new Uri("指纹特征图.jpg", UriKind.Relative)); Canvas.SetLeft(image,0); Canvas.SetTop(image,0); canvas.Children.Add(image); } private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point canvasPoint = e.GetPosition(canvas); Point imagePoint = e.GetPosition(image); Console.WriteLine(canvasPoint.X.ToString(), canvasPoint.Y.ToString()); Console.WriteLine(imagePoint.X.ToString(), imagePoint.Y.ToString()); } }
Xaml效果图:
Canvas的宽和高是200,image的宽和高是100,当image.Source为Null时,不显示图片。其实image就在Canvas的左上角。那就点击100,100以内的任意一个点。
看到了吧,我点击的同一个点,从canvas获取的值和从image获取的值时不一致的。那我们把image.Source付给一个图片。然后继续测试。
这次的坐标值就一致了,经过我的测试。发现如果image.Source= null,image的坐标原点就不是左上角了,是以image的中心点作为原点的。所以要注意了,image.Source是不是null,会对获取的坐标结果有影响的。



