WPF 使用e.GetPosition获取Image控件坐标时,Image.Source是否为null对获取坐标结果的影响

33 篇文章 4 订阅

今天做项目时,想要获取Canvas中的一个Image控件的相对坐标。发现获取到鼠标按下的坐标值总是对不上。经过反复的尝试,发现Image控件的Source是否为空会对获取坐标的结果有影响。举个例子吧,在Grid中放置一个Canvas,在后台代码中添加一个image控件。

xaml

<Window x:Class="Canvas_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Canvas_WPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="400">
    <Grid>
        <Canvas x:Name="canvas" Width="200" Height="200" Background="Blue" MouseLeftButtonDown="canvas_MouseLeftButtonDown">
        </Canvas>
    </Grid>
</Window>

xaml.cs

先把image.Source源注释掉

 /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    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,会对获取的坐标结果有影响的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚楚3107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值