今天分享一下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 Blend的经验分享会持续推出,欢迎关注我的博客!
我个人的小作品展示平台 :http://raimon.6.gwidc.com/
欢迎有志于钻研Blend的朋友加入我们的Blend美工群QQ:152049269

Expression Blend4经验分享:自适应布局浅析的更多相关文章

  1. Expression Blend4经验分享:文字公告无缝循环滚动效果

    这次分享一个类似新闻公告板的无缝循环滚动效果,相信很多项目都会应用到这个效果.之前我也百度了一下,网上的一些Silverlight的文字或图片滚动效果,都是一次性滚动的,如果要做到无缝循环滚动,多数要 ...

  2. Expression Blend4经验分享:制作一个简单的图片按钮样式

    这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...

  3. Expression Blend4经验分享:制作一个简单的文字按钮样式

    首先在Grid里放一个TextBlock,对象时间线窗口的结构树如下 右键点击grid,选择构成控件 会弹出构成控件的对话框,选择你要构成的控件类型,控件名称,控件样式存储位置 这里我们选择butto ...

  4. Html5 布局经验分享-第1集

    移动端的布局与pc端的布局相比 移动端的布局就简单的多,兼容性不必考虑那么多,css3各种特性基本上是可以放肆的写:(个人看法) 本人做移动web 布局一段时间了,把这其中遇到的一些问题总结下来,均是 ...

  5. 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享

    在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...

  6. BFC之宽度自适应布局篇

    说到自适应布局,我们曾在“抛砖引玉之宽度自适应布局”一文中学习过.当时的核心思想主要是利用float+margin的形式.利用块状元素的流体特性,然后计算出float元素的宽度,并赋予到块状元素的相应 ...

  7. 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局

    这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...

  8. 使用css3中calc()进行自适应布局

    calc()能做什么? calc()可以通过计算得到元素的宽度或者高度,让我们很容易进行自适应布局. 你可以为一个div元素,使用百分比.em.px和rem单位值计算出其宽度或者高度,比如说“widt ...

  9. 【老司机经验】CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享

    CC2530&STM8S105二合一嵌入式学习板设计思路与经验分享 1.缘起    这些年来一直在其他公司的实验箱和别人的开发板上进行教学与开发工作,总是觉得功能设计不那么合意.心里突然冒出个 ...

随机推荐

  1. ADO。Net(二)——防止SQL注入攻击

    规避SQL注入 如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入Code值 p001' union select * from Info where '1'='1 //这样可 ...

  2. 【转】MySQL 高可用架构在业务层面的分析研究

    原文地址 http://database.51cto.com/art/201507/483463_all.htm 前言: 相对于传统行业的相对服务时间9x9x6或者9x12x5,因为互联网电子商务以及 ...

  3. Linux network driver

    一.常见问题 1)2.6.32内核不兼容I219网卡 http://exxactcorp.com/blog/how-to-installconfigure-intel-i219-network-ada ...

  4. 修改TFS客户端的工作区类型

    TFS系统存在两种工作区类型:"​本地"和"服务器".默认情况下,用户使用本地工作区实现代码管理. 但是在用户端代码文件特别多(超过10万个文件)时,由于每次启 ...

  5. 【温故而知新-Javascript】使用地理定位

    地理定位(Geolocation)API让我们可以获取用户当前地理位置的信息(或者至少是正在运行浏览器的系统的位置).它不是HTML5规范的一部分,但经常被归组到与HTML5相关的新功能中. 1. 使 ...

  6. url 特殊字符

    URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(1 ...

  7. Python+excel实现的简单接口自动化 V0.1

    好久没写博客了..最近忙着工作以及新工作的事.. 看了下以前写的简单接口自动化,拿出来总结下,也算记录下学习成果 先来贴一下最后的结果,结果是写在原来的excel中 执行完毕后,会将结果写入到“状态” ...

  8. Codeforces水题集合[14/未完待续]

    Codeforces Round #371 (Div. 2) A. Meeting of Old Friends |B. Filya and Homework A. Meeting of Old Fr ...

  9. Linux下mysql新建账号及权限设置

    http://www.cnblogs.com/eczhou/archive/2012/07/12/2588187.html 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连 ...

  10. Java中的单例模式

    单例模式: public class Person{ public static Person per; //定义一个静态变量,用来存储当前类的对象 private Person() //构造一个私有 ...