原文:wpf窗体定位

据WPF外包小编了解,通常,不需要在屏幕上明确定位窗口。而是简单地将WindowState属性设置为Normal,并忽略其他所有细节。另一方面,很少会将WindowStartupLocation属性设置为Manual,并使用Left属性和Right属性明确设置窗口的位置。

有时需要更加关注为窗口选择位置和尺寸。例如,如果创建的窗口太大而不能使用低分辨率显示器就会遇到麻烦。如果使用一个单窗口应用程序,最好的解决方法是创建可以改变尺寸的窗口。如果使用具有几个浮动窗口的应用程序,问题就没有这么简单了。

据WPF外包公司小编了解,可以限制窗口的尺寸使其支持最小的显示器,但是这会让高端用户感到沮丧(它们为了在屏幕上一次显示更多的信息,专门购买更好的显示器)。对于这种情况,通常希望在运行时决定窗口的最佳位置。为此,需要使用System.Windows.SystemParameters类来检索有关屏幕真实状态的基本信息。

SystemParameters类包含一些静态属性,从中可以得到各种有关系统设置的信息。例如,可以使用SystemParameters类来决定用户是否启用了热跟踪(hot tracking)、拖动时显示窗口内容选项,以及其他选项。对于窗口,SystemParameters类特别有用,因为它提供的两个属性可以给出当前屏幕的分辨率:

FullPrimaryScreenHeight属性和FullPrimaryScreenWidth属性。这两个属性都非常简单,下面是一些(在运行时将窗口定位在屏幕中央的)演示代码:

double screeHeight = SystemParameters.FullPrimaryScreenHeight;

double screeWidth = SystemParameters.FullPrimaryScreenWidth;

this.Top = (screenHeight - this.Height) / 2;

this.Left = (screenWidth - this.Width) / 2;

WPF外包专家了解,尽管使用这些代码和将窗口的WindowState属性设置为CenterScreen效果是相同的,但是使用代码具有实现不同定位逻辑的灵活性,并且可以在合适的时间执行这些定位逻辑。

更好的选择是使用SystemParameters.WorkArea矩形,使窗口位于可用屏幕区域的中央。工作区域不包括停靠任务栏(以及其他停靠到桌面的工具条)的区域。

double workHeight = SystemParameters.WorkArea.Height;

double workWidth = SystemParameters.WorkArea.Width;

this.Top = (workHeight - this.Height) / 2;

this.Left = (workWidth - this.Width) / 2;

注意:

这两个示例代码都存在一个小缺点。当为窗口设置Top属性时,窗口已经是可见的了,并且窗口会被立即移动和刷新。当使用后面一行代码设置Left属性时会发生同样的过程。因此,视觉敏锐的用户会看到两次窗口移动。遗憾的是,Window类没有提供一个方法同时设置这两个位置属性。唯一的解决方法是在窗口创建之后还未通过调用Show( )方法或ShowDialog( )方法显示之前定位窗口。

wpf窗体定位的更多相关文章

  1. Winform WPF 窗体显示位置

    WinForm 窗体显示位置 窗体显示的位置首先由窗体的StartPosition决定,FormStartPosition这个枚举值由如下几种情况 // 摘要: // 窗体的位置由 System.Wi ...

  2. WinForm 与WPF 窗体之间的想到调用

    先放置一个容器控件,并设计 好WinForm(或WPF)窗口 winform 调用 wpf ElementHost el = new ElementHost(); el.Dock = DockStyl ...

  3. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  4. 关于WinForm引用WPF窗体

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  5. WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension

    问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...

  6. WPF窗体禁用最大化按钮

    禁用WPF窗体的最大化按钮可以使用Windows API改变按钮状态的方法实现.使用GetWindowLong可以得到当前按钮的状态.使用SetWindowLong可以设置按钮的状态.使用SetWin ...

  7. WPF自学入门(八)WPF窗体之间的交互

    今天我们一起来看一下WPF窗体之间的交互-窗体之间的传值.有两个窗体,一个是父窗体,一个是子窗体.要将父窗体的文本框中的值传递给子窗体中的控件.我们该怎么实现? 接下来我们一起来实现窗体之间的传值,在 ...

  8. 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上

    在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了. 我们可以简单的实例化一个WP ...

  9. WPF窗体の投影效果

    有时候我们需要给WPF窗体加上一个毛边(投影效果) 我们可以在窗体下加上如下代码 <Window.Effect> <DropShadowEffect BlurRadius=" ...

随机推荐

  1. Home界面的启动

    继上篇文章Launcher进程的启动,我们继续分析Home界面的启动. public final class ActivityThread { ...... public static final v ...

  2. UUIDUtils工具类

    原理是根据自身的操作系统和电脑硬件生成的一个32位的随机字符串,如果是一台电脑使用的话,一年不会重复,经过java之后貌似编程了36位,多了4个"-",下面是代码实现: impor ...

  3. new File(String Path)加载资源问题

    2017-12-17   15:07:38  [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...

  4. QPalette实例教程(QWidget自带的颜色设置工具,对Window的各个部分都可设置颜色)

    QPalette是一款非常好用的颜色设置工具: 头文件:#include <QPalette> (^-^我没有用这个头文件也可以使用QPalette) 常用函数: void setBrus ...

  5. 代码中jndi数据源的支持

    项目中基本都使用Spring框架,支持jndi还是很简单的,只需在spring配置文件中加入 <!-- 使用jndi配置数据源 --> <bean id="dataSour ...

  6. Scala入门到精通——第二十七节 Scala操纵XML

    本节主要内容 XML 字面量 XML内容提取 XML对象序列化及反序列化 XML文件读取与保存 XML模式匹配 1. XML 字面量 XML是一种很重要的半结构化数据表示方式,眼下大量的应用依赖于XM ...

  7. 192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js

    尝试了各种方法,始终安装不了node.偶然一次,安装了64位的Centos 6 minimal,竟然可以安装Node官网给出的命令安装node了,一切顺利.

  8. C# .NET数据库操作

    C# .NET更智能的数据库操作的封装完整版(重构)   前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天 ...

  9. MyEclipse各种版本号注冊码

    一:MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller注冊码 Subscriber:javp Subscription Code:wLR7ZL-655551-685 ...

  10. 机器学习: t-Stochastic Neighbor Embedding 降维算法 (一)

    Introduction 在计算机视觉及机器学习领域,数据的可视化是非常重要的一个应用,一般我们处理的数据都是成百上千维的,但是我们知道,目前我们可以感知的数据维度最多只有三维,超出三维的数据是没有办 ...