You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取和设置WPF Page的页面位置与尺寸?

解决WPF Page中获取/设置窗口尺寸与位置的问题

这问题我太熟了!WPF里的Page本身并不是独立窗口,它得靠NavigationWindow或者Frame这类容器来承载,所以你直接在Page里找不到窗口级的属性和事件很正常,得先找到它的宿主窗口才行,给你一步步说怎么弄:

1. 先拿到Page的宿主窗口

Page本身没有窗口级的属性,所以第一步要获取承载它的Window实例。最稳妥的时机是在Page的Loaded事件里做这件事,因为此时页面已经成功加载到容器中了:

private Window _hostWindow;

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    // 获取当前Page所在的宿主窗口
    _hostWindow = Window.GetWindow(this);
    
    // 可以顺便绑定窗口的LocationChanged事件,监听位置变化
    if (_hostWindow != null)
    {
        _hostWindow.LocationChanged += HostWindow_LocationChanged;
    }
}

// 窗口位置变化时的处理逻辑
private void HostWindow_LocationChanged(object sender, EventArgs e)
{
    // 这里可以获取最新的窗口位置
    double currentLeft = _hostWindow.Left;
    double currentTop = _hostWindow.Top;
    // 执行你需要的操作
}

2. 获取与设置窗口尺寸

拿到宿主窗口后,就可以直接用窗口的属性来操作尺寸了:

  • 获取尺寸:用_hostWindow.ActualWidth、_hostWindow.ActualHeight(实际渲染的真实尺寸),或者_hostWindow.Width、_hostWindow.Height(手动设置的尺寸值)
  • 设置尺寸:直接给_hostWindow.Width和_hostWindow.Height赋值即可,比如:
// 设置窗口宽高为800x600
_hostWindow.Width = 800;
_hostWindow.Height = 600;

另外,你已经用到的Page_SizeChanged事件也会在窗口尺寸变化时触发,因为Page会跟着窗口容器一起调整大小,如果你只需要页面自身的尺寸,直接在这个事件里用this.ActualWidth、this.ActualHeight也完全可行。

3. 获取与设置窗口位置

同样通过宿主窗口的属性来操作:

  • 获取位置:读取_hostWindow.Left和_hostWindow.Top即可拿到窗口左上角的坐标
  • 设置位置:直接给这两个属性赋值,比如:
// 将窗口移动到屏幕左上角
_hostWindow.Left = 0;
_hostWindow.Top = 0;

额外注意事项

  • 记得在Page卸载的时候解绑LocationChanged事件,避免内存泄漏:
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
    if (_hostWindow != null)
    {
        _hostWindow.LocationChanged -= HostWindow_LocationChanged;
    }
}
  • 如果你的Page是嵌套在Frame里,而Frame又放在其他窗口中,Window.GetWindow(this)依然能正确找到最外层的宿主窗口,不用额外做嵌套层级的处理。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:41