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

news2024/11/7 11:25:09

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.coloradmin.cn/o/2234972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应急救援无人车:用科技守护安全!

一、核心功能 快速进入危险区域: 救援无人车能够迅速进入地震、火灾、洪水等自然灾害或重大事故的现场,这些区域往往对人类救援人员构成极大威胁。 通过自主导航和环境感知技术,无人车能够避开危险区域,确保自身安全的同时&…

辩论赛——动态IP与静态IP的巅峰对决

尊敬的各位观众: 大家好!欢迎来到今天的演说舞台,我是主持人小蝌蚪。今天,我们将见证一场精彩绝伦的辩论,辩论的双方是动态IP和静态IP。他们将围绕各自的优缺点展开激烈的辩论,为我们揭示代理IP世界中的奥…

红米k70怎么设置「短信通知」在锁屏时隐藏内容,不锁屏时不隐藏内容

红米 K70 设置短信通知在锁屏时隐藏内容、不锁屏时不隐藏内容,可以按照以下步骤进行操作: 打开手机设置:在主屏幕上找到并点击 “设置” 图标,进入手机设置页面。进入通知与控制中心:在设置页面中,找到并点…

【计算机网络】零碎知识点(易忘 / 易错)总结回顾

一、计算机网络的发展背景 1、网络的定义 网络是指将多个计算机或设备通过通信线路、传输协议和网络设备连接起来,形成一个相互通信和共享资源的系统。 2、局域网 LAN 相对于广域网 WAN 而言,局域网 LAN 主要是指在相对较小的范围内的计算机互联网络 …

Python 在PDF中绘制形状(线条、矩形、椭圆形等)

在PDF中绘制图形可以增强文档的视觉效果。通过添加不同类型的形状,如实线、虚线、矩形、圆形等,可以使文档更加生动有趣,提高读者的阅读兴趣。这对于制作报告、演示文稿或是教材特别有用。本文将通过以下几个示例介绍如何使用Python 在PDF中绘…

三菱MR-J4伺服绝对位置检测系统

发生[AL.25 绝对位置丢失]或[AL.E3 绝对位置计数器警告]时,必须再次进行原点设定。否则可能会因此发生预料之外的动作。 概要 常规运行时,编码器由检测1转内位置的编码器和检测转数的旋转累计计数器构成。 绝对位置检测系统与伺服系统控制器电源…

程序员行业会因此受到什么冲击?

床铺再次当选,会对两家关系产生深远影响。在此篇博客中,我们将探讨床铺的政策对我们外贸、就业、留学以及特别是互联网产业和我们程序员职业的潜在影响。 关系趋紧:摩擦可能会更多 床铺在其任期期间对我们施加了诸多贸易税,采取…

Edge浏览器打开PDF无法显示电子签章

Edge浏览器打开PDF无法显示电子签章 直接说处理方式 直接说处理方式 浏览器地址栏,输入 edge://flags/搜索:pdf禁用:New PDF Viewer效果如下

02- 模块化编程-006 ADC0808数码显示对比

1、ADC0808 芯片介绍 ADC0808是一款集成的CMOS设备,包含8位模拟至数字转换器、8通道多路复用器和与微处理器兼容的控制逻辑。8位A/D转换器采用逐次逼近作为转换技术。转换器特点包括高阻抗斩波稳定比较器、256R电压分压器、模拟开关树和逐次逼近寄存器。8通道多路复…

计算机体系结构之多级缓存、缓存miss及缓存hit(二)

前面章节《计算机体系结构之缓存机制原理及其应用(一)》讲了关于缓存机制的原理及其应用,其中提出了多级缓存、缓存miss以及缓存hit的疑问。故,本章将进行展开讲解, 多级缓存、缓存miss以及缓存hit存在的意义是为了保持…

scala set训练

Set实训内容: 1.创建一个可变Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示),初始化为包含几本你喜欢的书籍 2.添加两本新的书籍到图书馆集合中,使用操作符 3.删除一本图书馆集合中的书籍&…

linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述: 可以将上面这一 I2C 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层, 本篇主要内容就是介绍 I2C 子系统框架中…

鸿蒙系统崛起:开发者如何把握机遇、应对挑战并打造卓越应用体验?

在当今科技发展的浪潮中,鸿蒙系统(HarmonyOS)如一颗璀璨之星,正以迅猛之势崛起。随着其持续发展,鸿蒙系统在全球操作系统市场中已然崭露头角,呈现出与安卓(Android)和iOS分庭抗礼的态…

Scala入门基础(17)Set集

Set的定义Set的代码结构不可变与可变Set的区别Set常见操作 一.Set的定义 Set:集合 Set的特点:唯一(元素不相同) 二.Set的代码结构 val 变量名 Set[类型](元素1,元素2...) (演示&#xff09…

基于单片机的燃气报警阀门系统

本设计基于单片机的燃气报警阀门系统,燃气报警阀门系统采用STM32主控制器为核心芯片,外围电路由燃气传感器、OLED液晶显示模块、按键模块、蜂鸣器报警模块、电磁阀以及SIM800模块等模块组成。燃气传感器模块负责采集燃气浓度数据,采集完成由S…

揭秘云计算 | 2、业务需求推动IT发展

揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…

qt QItemSelectionModel详解

1、概述 QItemSelectionModel是Qt框架中提供的一个功能强大且灵活的项选择模型类。它主要用于在用户界面中管理和操作用户选定的项,是实现交互式和响应式应用程序的重要组件。QItemSelectionModel能够帮助开发者创建用户友好和高效的多选列表、表格数据选择等应用场…

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

实习作假:阿里健康实习做了RABC中台,还优化了短信发送流程

最近有二本同学说:“大拿老师,能帮忙看下简历吗?” 如果是从面试官的角度来看,这个同学的实习简历是很虚假的。 但是我们一直强调的是:校招的实习简历是不能出现明显的虚假。 首先,你去公司做事情&#…

mqtt 传递和推送 温湿度计消息 js

mqtt 传递和推送 温湿度计消息 做了一个mqtt的小网站 包括设备管理,订阅管理,连接认证订阅授权 这里我新增了一个设备 订阅组温湿度里面有两个订阅 设备详情授权给设备使用 设备连接 和之前的wifi连接一样 温湿度也和之前的使用一样 require(u…