v2rayN 创建节点的窗口, 长宽不超过屏幕 / 合入 v2rayN 主线, 成为 Contributors 之一
需求
解决思路
具体实践
安装 Microsoft Visual Studio
在 Microsoft Store 里有
安装组件选 .NET 桌面开发
下载源码
修改源码
打开 .sln 文件.
找到 AddServerWindow.xaml 文件.
// 设置窗口的尺寸不大于屏幕的尺寸if (this.Width > SystemParameters.WorkArea.Width){this.Width = SystemParameters.WorkArea.Width;}if (this.Height > SystemParameters.WorkArea.Height){this.Height = SystemParameters.WorkArea.Height;}
截图右边那一半是修改前的, 作为对比.
保存, 编译, 开始调试
用菜单也可以, 用快捷键也可以, 用快捷按钮也可以.
实际上, 还是没有一下子全部显示啦, 不过窗口的标题栏完整显示了, 而且也出现了上下滚动栏, 可以把窗口下半部分"滚"出来. :)
那么故技重施, 打开这些文件名后面带Window
然后你会发现, 主窗口没有修改效果.
其实除了这些以外, 还要改一个地方.
找到MainWindow,
右键菜单 - "查看设计器"
完
正确答案放在
========
题外话
与
先问了
在代码里找到
编译报错
把错误复制, 去问
还是报错, 说没有
我又换了几种提问方式, 在一次
然后换成这两段代码.
那么问题就在于窗口显示出来的整个过程.
首先是窗口要 初始化, 这时窗口被设置为一个大的形状.
然后是窗口 显示出来, 这时窗口是一个大的形状, 那么为了默认显示在屏幕正中间, 窗口的上下都会各有一部分显示在屏幕之外.
窗口显示在屏幕正中间, 在编程世界中的意思是, 窗口的上下边到屏幕上下边的距离相等, 窗口的左右边到屏幕的左右边的距离相等.
窗口上下边超过了屏幕, 那么负数也是要相等. :)
显示完之后, 再调用Window_Loaded
窗口的 位置 没有改变, 在编程世界中的意思是, 窗口的左上角这个顶点的位置没有改变.
所以我们可以看到窗口的下边沿
解决方案一种就是在设置窗口形状以后, 判断如果左上角在屏幕以外时, 设置左上角的位置到屏幕内.
if (this.Top < 0){this.Top = 0;}
还有一种方案就是把调整窗口的形状提前到窗口初始化过程时. 就像本篇博文最前面讲的那样.
==========
update
到上面为止修改的方案在你自己的一个屏幕的场景下应该没问题, 但是在多个屏幕的情况下, 比如你是笔记本外接了一个大显示器, 会出现问题是:
1. 如果大屏幕是主屏幕, 在小屏幕上面启动程序, 并不能正确设置窗口大小
2. 如果小屏幕是主屏幕, 窗口移动到大屏幕上面后, 拖动窗口不能变得更大, 窗口最大化也不能显示更多内容.
原因是我们设置了窗口的最大尺寸. 需要修改为设置窗口的实际尺寸.
// 设置窗口的尺寸不大于屏幕的尺寸if (this.Width > SystemParameters.WorkArea.Width){this.Width = SystemParameters.WorkArea.Width;}if (this.Height > SystemParameters.WorkArea.Height){this.Height = SystemParameters.WorkArea.Height;}
==========
update
合入
人人都可以为开源项目出一份力. 虽然功能简单, 代码量小, 但是你的努力不会被遗忘.
==========
后记
最后谈一下把
我觉得
Good job, i got it !
恭喜你做到了!
编程并不是难以企及的. 只要心中有冲动, 大胆动手. 人人都可以玩代码!