利用WPF建立自适应窗口大小布局的Win窗口.doc_第1页
利用WPF建立自适应窗口大小布局的Win窗口.doc_第2页
利用WPF建立自适应窗口大小布局的Win窗口.doc_第3页
利用WPF建立自适应窗口大小布局的Win窗口.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用WPF建立自适应窗口大小布局的WinForm窗口编写WinForm程序时,都会碰到一个问题。就是WinForm窗口在不同分辨率下的大小问题。举例说明,你编写的WinForm窗口在1024768下是合适、匀称的。不过,如果用户的计算机的分辨率为1400900时,你的WinForm窗口就显得偏小,其中的字体和控件都显得偏小。如果用户的分辨率为640480,那你的窗口就远远超过它的屏幕的大小。如何解决这个问题?一般的WinForm程序都会这样操作:程序启动获取屏幕分辨率调整窗体的大小调整各个控件大小及位置调整各个控件的字体。这样操作比较繁琐,并且要考虑到各种分辨率的情况。这样一来,如果WinForm窗口上有若干控件,调整是一件很痛苦的事。有没有这样的手段。我只要调整WinForm窗口的大小,其中的各个控件大小(包括字体)自动的等比例缩放?还记得一些DirectX的游戏程序吗?当设定为固定的分辨率时(比如800600),在全屏的时候,他都会自动缩放。WinForm有这样的手段吗?答案是肯定的。在WPF中就能很简单的实现该功能。利用WPF中的ViewBox容器空间。ViewBox是一个容器空间,它会自动缩放容器中的子空间以填满自身,同时它只能有一个子控件。不过,我们可以把Canvas控件作为ViewBox控件的子控件。然后在Canvas控件中布局其他的控件。先看看下面的窗口的Xaml文件?123456789101112131415161718192021222324252627282930313233先简单的说明这个XAML文件最外面的是Window容器,设置了标题(WPFTest)和大小(400300),它也只能有一个子控件。Window的子控件是DockPanel容器,是自动停靠容器控件。设置LastChildFill=True,表示最后一个子控件自动填充剩余的空间。没有设置大小,默认大小是Window的客户区大小。DockPanel控件有三个子控件Menu控件:菜单控件,自动停靠在容器的顶端StatusBar控件:状态栏控件,自动停靠在容器的底部ViewBox控件:容器控件,自动填充DockPanel剩余的控件。没有设置大小,为填充的大小。设置填充的模式为Fill,表示子控件填充自身的容器的大小在ViewBox中放置了一个Canvas控件,设置了大小(注:一定要设置大小,否则默认时会产生各种不可思议的效果),设置了背景色在Canvas中放置了一个Button控件。只是示例,Canvas中还能放置其他的控件在Window的代码中输入如下的代码代码启动后是如下的效果可以看出窗口的宽度是400,由于ViewBox没有设置宽度,故显示非数字,按钮的宽度是87拖动右下角,调整Window的大小。如下图所示和上图的比较,Window的大小发生了变化。ViewBox中的子控件也自动的拉伸了。这个从Button的外观能很明显的感受到。更神奇的是,无论我怎么调整Window的大小,Button的外观也随着Window的大小而改变,不过,在内部的逻辑中,Button的宽度始终是87,始终没有发生变化。另,由于Menu和StatusBar不在ViewBox内。故这两个控件没有缩放,还是原始的大小这给我们带来了极大的便利。无论window被调整到如何,在内部逻辑中,ViewBox中的子控件Canvas的逻辑大小始终是300200。我们不需要再为调整后的大小设计额外的代码。实际上,我猜测。ViewBox的显示机制是,先在内存中把按照逻辑大小把子控件显示出来,然后等比例的缩放显示到ViewBox的客户区。回到开始的话题。编写的WinForm窗口如何应对不同的分辨率?在WPF中,将所有的客户控件放在Canvas中再放在ViewBox控件中,利用ViewBox的特性来实现自动的缩放。流程就变成了:程序启动获取屏幕分辨率调整窗体的大小。其余控件的缩放就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论