You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取WPF PresentationFramework中Location控件的坐标信息?

获取WPF Location控件的坐标信息

嘿,这个问题其实很常见,因为你的Location控件是放在Canvas容器里的,它的位置是由Canvas的附加属性来管理的,所以直接通过控件本身的属性找不到Left/Top,得用Canvas提供的静态方法来获取。

下面给你几种常用的获取方式,根据你的需求选择:

1. 获取控件在Canvas中的原始定位坐标(最符合你的需求)

因为你在XAML里设置的是Canvas.LeftCanvas.Top,所以直接用Canvas的静态方法就能拿到这些值:

private void Location_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    <namespace>.Location loc = sender as <namespace>.Location;
    if (loc != null)
    {
        // 获取X坐标(对应XAML里的Canvas.Left)
        double x = Canvas.GetLeft(loc);
        // 获取Y坐标(对应XAML里的Canvas.Top)
        double y = Canvas.GetTop(loc);
        
        // 这里就可以使用x和y的值了
    }
}

为什么要用Canvas.GetLeft()而不是loc.Left?因为LeftTop不是UserControl自带的属性,它们是Canvas为子元素提供的附加属性,用来告诉Canvas该怎么摆放这个控件,所以必须通过Canvas的静态方法来读取。

2. 获取控件相对于父窗口/页面的坐标

如果你需要的是控件左上角相对于整个窗口的位置,可以用TransformToAncestor方法:

Point relativeToWindow = loc.TransformToAncestor(this).Transform(new Point(0, 0));
// relativeToWindow.X 和 relativeToWindow.Y 就是相对于窗口的坐标

3. 获取控件相对于屏幕的坐标

如果要拿到屏幕坐标系下的位置,用PointToScreen方法:

Point relativeToScreen = loc.PointToScreen(new Point(0, 0));
// relativeToScreen.X 和 relativeToScreen.Y 就是屏幕上的坐标

总结一下,最贴合你需求的就是第一种方式,直接读取Canvas附加属性的值,这就是你在XAML里设置的那个坐标,完全不需要依赖鼠标事件就能获取到~

内容的提问来源于stack exchange,提问作者Dominique

火山引擎 最新活动