当前位置: 首页 > article >正文

【WPF】把一个Window放在左上角/右上角顶格显示

1. Window放在右上角顶格显示

在WPF中,如果想要将一个窗口(Window)放置在屏幕的右上角,并且保持这个位置不变,可以通过设置窗口的位置属性来实现。

以下是如何做到这一点的步骤:

  1. 获取屏幕的工作区域大小。
  2. 计算窗口应该出现的位置。
  3. 设置窗口的位置。

为了确保窗口每次显示时都位于屏幕的右上角,即使它之前被移动过或隐藏过,可以在每次调用 Show 方法之前重新设置其位置。通过在调用 Show 方法之前调用一个方法来更新窗口的位置。

  1. 创建一个方法来设置窗口到右上角。
  2. 在 Show 方法之前调用这个方法。

首先,在窗口类中添加一个方法来设置窗口位置到右上角:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        // 初始化时可以设置位置
        SetPositionToTopRight();
    }

    private void SetPositionToTopRight()
    {
        // 获取主屏幕的工作区域
        System.Windows.Forms.Screen primaryScreen = System.Windows.Forms.Screen.PrimaryScreen;
        var workingArea = primaryScreen.WorkingArea;

        // 计算窗口的左上角坐标,使它位于屏幕右上角
        double x = workingArea.Right - this.Width;
        double y = workingArea.Top;

        // 设置窗口的位置
        this.Left = x;
        this.Top = y;
    }

    // 重写 Show 方法以确保每次显示前都定位到右上角
    public new void Show()
    {
        SetPositionToTopRight();
        base.Show();
    }
}

在这个例子中,我们重写了 WindowShow 方法,并在其中调用了 SetPositionToTopRight 方法来设置窗口的位置,然后再调用基类的 Show 方法来实际显示窗口。

如果不想重写 Show 方法,也可以在每次需要显示窗口的地方手动调用 SetPositionToTopRight 方法,例如:

private void SomeMethodThatShowsTheWindow()
{
    // 假设窗口已经被隐藏了
    if (this.WindowState == WindowState.Minimized)
    {
        this.WindowState = WindowState.Normal; // 如果是最小化状态,恢复窗口
    }

    // 每次显示前设置窗口位置
    SetPositionToTopRight();

    // 显示窗口
    this.Show();
}

 2.Window放在左上角顶格显示

将一个 WPF 窗口固定在屏幕的左上角显示,可以通过设置窗口的位置属性来实现。与之前的方法类似,我们需要在窗口初始化时设置其位置,并确保在每次显示窗口时都重新设置位置。

以下是具体的实现步骤:

  1. 获取屏幕的工作区域:这可以帮助我们确定屏幕的左上角位置。
  2. 计算窗口的位置:左上角的位置通常是屏幕的 (0, 0) 坐标。
  3. 设置窗口的位置:将窗口的 Left 和 Top 属性设置为计算出的值。
  4. 确保窗口每次显示时都重新设置位置:可以在 Show 方法之前调用一个方法来设置位置。

示例代码

1. 在构造函数中设置位置

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        // 初始化时设置位置
        SetPositionToTopLeft();
    }

    private void SetPositionToTopLeft()
    {
        // 获取主屏幕的工作区域
        System.Windows.SystemParameters.WorkArea workArea = System.Windows.SystemParameters.WorkArea;

        // 设置窗口的位置为屏幕的左上角
        this.Left = workArea.Left;
        this.Top = workArea.Top;
    }

    // 重写 Show 方法以确保每次显示前都定位到左上角
    public new void Show()
    {
        SetPositionToTopLeft();
        base.Show();
    }
}

2. 在每次显示窗口时手动设置位置

如果不想重写 Show 方法,可以在每次需要显示窗口的地方手动调用 SetPositionToTopLeft 方法:

private void SomeMethodThatShowsTheWindow()
{
    // 假设窗口已经被隐藏了
    if (this.WindowState == WindowState.Minimized)
    {
        this.WindowState = WindowState.Normal; // 如果是最小化状态,恢复窗口
    }

    // 每次显示前设置窗口位置
    SetPositionToTopLeft();

    // 显示窗口
    this.Show();
}

注意事项

  1. 确保窗口的宽度和高度已知:在设置位置之前,确保窗口的宽度和高度已经确定,否则计算出的位置可能会不准确。
  2. 处理多屏环境:上述代码假设窗口显示在主屏幕上。如果需要支持多屏环境,可以使用 System.Windows.Forms.Screen 类来获取所有屏幕的信息,并选择合适的屏幕进行定位。

多屏环境支持

如果需要支持多屏环境,可以使用 System.Windows.Forms.Screen 类来获取所有屏幕的信息,并选择合适的屏幕进行定位:

private void SetPositionToTopLeft()
{
    // 获取主屏幕的工作区域
    System.Windows.Forms.Screen primaryScreen = System.Windows.Forms.Screen.PrimaryScreen;
    var workArea = primaryScreen.WorkingArea;

    // 设置窗口的位置为屏幕的左上角
    this.Left = workArea.Left;
    this.Top = workArea.Top;
}

 这样,无论是在单屏还是多屏环境中,窗口都会被固定在屏幕的左上角显示。

 


http://www.kler.cn/a/383893.html

相关文章:

  • 数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
  • 带点符号的 TypeScript 实用程序类型 NestedKeyOf 在严格模式下失败
  • SpringMVC项目转为SpringBoot项目
  • Java学习者的福音:SpringBoot教学辅助平台
  • 群控系统服务端开发模式-应用开发-个人资料
  • 雷池社区版7.1新版本自定义NGINX配置分析
  • c# 深度模型入门
  • 【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
  • Docker compose 部署MongoDB
  • Python OpenCV图片读取和保存
  • CSS弹性布局:灵活布局的终极指南
  • 使用Python多线程抓取某图网数据并下载图片
  • Ubuntu 安装 redis
  • 前端基础-html-注册界面
  • 前端Web用户 token 持久化
  • java的类加载机制的学习
  • 最新kubernetes搭建(k8s)(已成功搭建)
  • CSS中的 BFC,是啥呀?
  • NetCore使用Aop和内存缓存对接口、方法进行数据缓存
  • SpringSecurity(三)SpringBoot集成SpringSecurity实现认证授权
  • 软考:性能测试的几个方面
  • 组态软件的概念
  • 基于单片机的变频空调系统设计(论文+源码)
  • 智能网联汽车:人工智能与汽车行业的深度融合
  • 在AI时代,如何解决人的工作岗位被AI替代的问题?
  • 删除 需要来自XXXX的权限才能对此文件夹进行更改 文件的解决办法