使用WPF创建一个窗体(Window)时,如果设置了固定的高度(Height)和宽度(Width),一旦用户的电脑分辨率过低,就会使得窗体及其中的内容无法完整地显示出来。要解决这个这个问题,有以下几个方法可供参考:

1、无论将窗体做成全屏的(WindowState="Maximized"),还是设置了固定的窗体大小,都可以利用DockPanel控件来进行布局。DockPanel控件有一个特殊的属性:LastChildFill="True",可以使该控件中的最后一个元素自动填充满剩下的位置。

如,某页面,最上方是一个下拉框,最下方是一个按钮,中间是一个列表。可以按如下写法进行布局:

<DockPanel LastChildFill="True">

    <ComboBox Height = "20" DockPanel.Dock="Top"/>

    <Button Height = "20" DockPanel.Dock="Bottom"/>

    <ListView DockPanel.Dock="Top">......</ListView>

</DockPanel>

这样即使列表控件ListView看上去是放在DockPanel的最后的位置,但其实是填充在了下拉框ComboBox和按钮Button之间的位置。由于下拉框和按钮都指定了具体的高度,因此该页面中间的大片空白就被ListView全部填满,不需要为ListView指定一个具体的高度或宽度。

无论分辨率如何变化,只要窗体是能够完整显示出来的,窗体中的元素都能够正常显示。

2、如果窗体不是全屏的,设置了具体的高度或宽度,在有些分辨率下连窗体都无法显示完全,那么上述方法也无法解决问题。只能使用ViewBox控件,该控件可拉伸和缩放单个子元素以填满可用空间。

一个 Viewbox 只能具有一个Child,需要将ViewBox作为窗体中的最外层元素,将所有控件都包括在其中,如:

<Window>

    <View>

      <DockPanel>

        ......

      </DockPanel>

    </View>

<Window>

再将所有控件放到DockPanel中进行布局。经过ViewBox处理过的窗体,在分辨率不足以显示原定大小的情况下,会根据分辨率将窗体、窗体中的所有控件,包括字体大小,都按比例自动进行缩放。

http://www.cnblogs.com/xuxiaona/archive/2013/03/28/2987193.html

WPF窗体自适应分辨率的更多相关文章

  1. WinForm窗体自适应分辨率

    我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可.因 ...

  2. Delphi:窗体自适应屏幕分辨率的改进

    在窗体依据屏幕分辨率自适应调整尺度方面,昨天的工作可以说是一个突破点.昨天的工作找到了长期以来我的原有方案的问题所在,这是非常关键的.但是昨天晚上的解决方案并不完美,今天的这个才是比较完美的解决版. ...

  3. WPF之路四:窗体自适应

    下面我来举个例子说明如何用Grid或DockPanel来实现自适应窗体. 让我们新建一个WPF工程,完成后我们打开对应的XAML文件,可以看到VS已经自动添加了<Grid></Gri ...

  4. WPFの获取屏幕分辨率并自适应

    double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; ...

  5. delphi 窗体自适应屏幕分辨率

    delphi 窗体自适应屏幕分辨率 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设计器,这一点让VC粉丝垂涎三尺而不可得.但是,Delphi里设计的窗体并没有自动 ...

  6. Windows 窗体的自适应分辨率、分屏显示、开机自启动

    前言 这里所说的针对Winform.WPF 都适用.开机自启动对于控制台的也可以. 还是从项目实践中得来的,在这里记录下来. 对于自适应.分屏显示,在以前感觉应该比较高大上的问题,会比较难.在经过这次 ...

  7. WPF 获取屏幕分辨率(获取最大宽高)等

    double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; ...

  8. Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题

    给你一段代码,网上转的:unit uMyClassHelpers;//实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题.//        陈小斌,2012年3月5日 interface Uses ...

  9. Winform WPF 窗体显示位置

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

随机推荐

  1. :Spring-06 -AOP [面向切面编程] -配置异常通知的两种方式--AspectJ 方式 -Schema-based 方式

    三.配置异常通知的步骤(AspectJ 方式) 1.只有当切点报异常才能触发异常通知 2.在spring 中有AspectJ 方式提供了异常通知的办法 3.实现步骤: 3.1新建类,在类写任意名称的方 ...

  2. 【Low版】HAUT - OJ - Contest1035 - 2017届新生周赛(六)题解

    问题 A: 比赛 时间限制: 2 秒 内存限制: 256 MB | 提交: 393 解决: 98提交 状态 题目描述 学校要派6名同学组成两个队(一个队3个人)去参加比赛,每个同学有一个分数,学校希望 ...

  3. Centos7安装nginx后提示“Welcome to nginx on Fedora!”,conf.d目录下无default.conf文件

    问题描述 在腾讯云centos7上安装nginx sudo yum install nginx 打开默认网页显示 Welcome to nginx on Fedora! 且 /etc/nginx/co ...

  4. 《Exception》第五次作业:项目需求分析改进与系统设计

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1掌握面向对象需求分析方法:2.学习软件系统总 ...

  5. 六.Protobuf3引入其他.proto文件

    Protobuf3 使用其他消息类型 您可以使用其他消息类型作为字段类型.例如,假设您希望在每个SearchResponse消息中包含Result消息,为此,您可以在.proto中定义结果消息类型,然 ...

  6. yii2原生sql

    先创建连接对象 $connection = new \yii\db\Connection([ 'dsn' => $dsn, 'username' => $username, 'passwo ...

  7. Storm 安装时 部分supervisor启动成功,并不在web ui上显示

    今天帮公司搭建集群时,发现启动了三个Supervisor 发现只有一个显示在Web UI 上. 于是我就简单地检查了下另外两台没有启动的 storm supervisor的日志, 发现没有报出什么异常 ...

  8. php自定义函数之匿名函数

    所谓匿名,就是没有名字. 匿名函数,也就是没有函数名的函数.直线电机参数 匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数. 匿名函数的写法比较灵活. 1.变量函数式的匿名函数 < ...

  9. mysql数据库从一台服务器迁移到另一台服务器上

    一.应用场景      由于要把测试服务器上的数据库迁移到正式服务器上,因此需要做数据库的迁移.这里记录一下. 二.数据库迁移1.新建数据库test create database test;12.进 ...

  10. vue组件传值的三种方式,文字版解释

    父传子: 当子组件子父组件中当标签使用的时候,给子组件添加一个自定义属性,值为需要传递的值(如: <Child v-bind:parentToChild="parentMsg" ...