Expression Blend4经验分享:自适应布局浅析
今天分享一下Blend制作自适应分辨率布局的经验,大家先看下效果图:
这是一个标准的三分天下的布局,两侧的红色区域是背景区域,是用来干吗的呢,下面简单的分析一下,大家就明白了。
1、拿到一个项目,进行初步的设计时,先要确定最小的布局尺寸,即页面在这个最小尺寸里也是可以正常显示的,我一般把这个尺寸作为设计画布的尺寸。在页面的xaml代码里用d:DesignWidth="800" d:DesignHeight="600"来确定设计区域的尺寸,这个尺寸只是你在Blend编辑状态时看到的尺寸,运行时是会根据浏览器的可视区域变化的,除非你给这个页面规定其Width和Height的大小。如果要把页面做成可以自适应分辨率大小的,那我们一般不设定其Width和Height的大小。
2、先在LayoutRoot这个根容器里放入页面布局容器和各种子容器。这里不一一赘述了,直接上代码:
<Grid x:Name="grid_layout" Margin="" Background="White" Grid.Column="" MinWidth="" MaxWidth="">
<Grid.RowDefinitions>
<RowDefinition Height="0.2*" MaxHeight=""/>
<RowDefinition Height="0.8*"/>
</Grid.RowDefinitions>
<Grid x:Name="grid_top" Margin="" Background="#FF51ABBC" >
<TextBlock x:Name="标题栏" HorizontalAlignment="Center" TextWrapping="Wrap" Text="标题栏" VerticalAlignment="Center" FontFamily="Microsoft YaHei" FontSize="" Foreground="White"/>
</Grid>
<Grid x:Name="grid_main" Margin="" Grid.Row="" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*" MaxWidth=""/>
<ColumnDefinition Width="0.7*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="grid_left" Margin="" Background="#FF51BCA1">
<TextBlock x:Name="左侧功能区域" HorizontalAlignment="Center" TextWrapping="Wrap" Text="左侧功能区域" VerticalAlignment="Center" FontFamily="Microsoft YaHei" FontSize="" Foreground="White" Width=""/>
</Grid>
<Grid x:Name="grid_right" Margin="" Background="#FFACBC51" Grid.Column="">
<TextBlock x:Name="内容区域" HorizontalAlignment="Center" TextWrapping="Wrap" Text="内容区域" VerticalAlignment="Center" FontFamily="Microsoft YaHei" FontSize="" Foreground="White"/>
</Grid>
</Grid>
</Grid>
基本的结构树如下图:
大家可能注意到了xaml里grid的列和行里会出现MaxHeight或MaxWidth,这是为了有效的控制布局在自适应分辨率时的度。自适应分辨率并不是完全根据比例变化的,大多数时候容器里的文字、图片、视频等等都有一定的尺寸,拉伸的过大会造成效果变形或缺失。所以设置一个容器伸展的最大和最小尺寸有利于控制自适应的度。
3、刚才我设置的设计尺寸是800*600,但是一般用户的电脑分辨率为1024*768、1280*1024,有的笔记本的分辨率甚至是1660*900的,如何让页面在这种分辨率下也能良好的显示呢?对于1660这种比较特殊的分辨率宽度,一般的页面布局是无法强行适应拉伸的,这样会造成刚才所说的内部元素的变形、缺失、排列失衡等等。我一般是这么做的,将页面主容器grid_layout的最大宽度设置为1024(假设这是页面最大适应度,即页面伸展后,内部各元素都能有效显示的最大尺寸),然后在根容器LayoutRoot上划分3列:
<Grid x:Name="LayoutRoot" Background="#FFFF8000">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*" MinWidth=""/>
<ColumnDefinition />
<ColumnDefinition Width="0*" MinWidth=""/>
</Grid.ColumnDefinitions>
</Grid>
将grid_layout放入第二列中,这样当分辨率超出1024的时候,根容器LayoutRoot的第一列和第三列就会自动对称显示出来,并且grid_layout会居中显示在浏览器上。这样基本就能解决了超宽分辨率自适应的问题。
以上这些是我在项目实践摸索出的一些有效经验,希望大家能举一反三,谢谢观看。
Expression Blend4经验分享:自适应布局浅析的更多相关文章
- Expression Blend4经验分享:文字公告无缝循环滚动效果
这次分享一个类似新闻公告板的无缝循环滚动效果,相信很多项目都会应用到这个效果.之前我也百度了一下,网上的一些Silverlight的文字或图片滚动效果,都是一次性滚动的,如果要做到无缝循环滚动,多数要 ...
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- Expression Blend4经验分享:制作一个简单的文字按钮样式
首先在Grid里放一个TextBlock,对象时间线窗口的结构树如下 右键点击grid,选择构成控件 会弹出构成控件的对话框,选择你要构成的控件类型,控件名称,控件样式存储位置 这里我们选择butto ...
- Html5 布局经验分享-第1集
移动端的布局与pc端的布局相比 移动端的布局就简单的多,兼容性不必考虑那么多,css3各种特性基本上是可以放肆的写:(个人看法) 本人做移动web 布局一段时间了,把这其中遇到的一些问题总结下来,均是 ...
- 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享
在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...
- BFC之宽度自适应布局篇
说到自适应布局,我们曾在“抛砖引玉之宽度自适应布局”一文中学习过.当时的核心思想主要是利用float+margin的形式.利用块状元素的流体特性,然后计算出float元素的宽度,并赋予到块状元素的相应 ...
- 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局
这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...
- 使用css3中calc()进行自适应布局
calc()能做什么? calc()可以通过计算得到元素的宽度或者高度,让我们很容易进行自适应布局. 你可以为一个div元素,使用百分比.em.px和rem单位值计算出其宽度或者高度,比如说“widt ...
- 【老司机经验】CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享
CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享 1.缘起 这些年来一直在其他公司的实验箱和别人的开发板上进行教学与开发工作,总是觉得功能设计不那么合意.心里突然冒出个 ...
随机推荐
- nutz如何体现mvc思想的
如何理解web mvc框架?? 一.没有使用mvc框架之前我们都是自己根据mvc分层思想的理解去把它物理化,比如:根据包的命名,根据类的后缀名,根据文件夹的命名去定义分层. 因为每个人对mvc的理解不 ...
- [Java]Hessian客户端和服务端代码例子
简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...
- Harrypotter
#include<iostream> using namespace std; int main() { ]={}; int a,b,c,d; cout<<"请输入总 ...
- Adaptive Code Via C#读书笔记
原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...
- SQL Server 连接超时案例一则
上周六,一工厂系统管理员反馈一数据库连接不上,SSMS连接数据库报"连接超时时间已到.在尝试使用预登录握手确认时超过了此超时时间.......", 如下截图所示: 另外远程连接也连 ...
- ORA-04031错误导致宕机案例分析
今天遇到一起ORACLE数据库宕机案例,下面是对这起数据库宕机案例的原因进行分析.解读.分析过程中顺便记录一下这个案例的前因后果,攒点经验值,培养一下分析.解决问题的能力. 案例环境: 操作系统 ...
- MySQL数据库出现The server quit without updating PID file.
一.服务器环境 操作系统:CentOS-6.4 服务器环境:集成环境LNMP1.0 二.步骤重现 1.安装LNMP1.0,具体操作方法见这里,安装成功: 2.因个人需求,现将MySQL数据库存放在/d ...
- mysql datetime查询异常
mysql datetime查询异常 异常:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp (2011 ...
- 编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
package com.hanqi.test; //银行账号 public class account { private String zhanghao;//账号 //私有余额 private do ...
- W3School-CSS 字体(font)实例
CSS 字体(font)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内边距 ...