关闭
关闭
首页 > 嵌入式软件 > windows phone

为什么叫室内装修呢?呵呵,其实说的是布局,具体些嘛,就是在一个页面中,你如何去摆放你的控件,如何管理它们,你说,像不像我们刚搬进新住所,要 “装修”一番?买一套什么样的茶几和杯具(我说的“杯具”指的是原意,不要理解错了),或者沙发什么的,该怎么放,摆在哪里好看,其实,我们做界面设计也是差不多这个道理。

相信我们下过象棋就知道,棋盘上有横向的,纵向的很多网格线,而棋子就是参照这些网格线来放置的,对,在WP页面布局中我们把这样的布局称为网格布局,对应的控件为Grid。

千万别小看这个Grid控件,它可是非常好用的,而且也比较灵活,对的,当我们创建一个新页面时,VS为我们生生的XAML中,正是使用了Grid控件进行布局的。

既然是网格了,肯定会有行和列的,而我们的控件就是按需要放到由这些行和列共同产生的单元格中,就是我们在做网页排版时用到的table标签,应该说是非常类似的。

下面我们一起动手做个小练习,通过这个练习,我们可以从一种更直观的角度去了解Grid控件的用法。

1、启动VS,新建一个WP应用程序,不用我多说了,都会了。

2、删除页面中的根Grid,整个删除。如下图所示。

 

3、然后,替换为以下XAML代码。

[html] 
  1. <Grid x:Name="Root">  
  2.     <Grid.ColumnDefinitions>  
  3.         <ColumnDefinition Width="*"/>  
  4.         <ColumnDefinition Width="*"/>  
  5.     </Grid.ColumnDefinitions>  
  6.     <Grid.RowDefinitions>  
  7.         <RowDefinition Height="*"/>  
  8.         <RowDefinition Height="*"/>  
  9.     </Grid.RowDefinitions>  
  10. </Grid>  

 

这样我们就定义了一个两行两列的网格布局,也就是整个页面被划分为4个方块。
先简单说一下行的高,列的宽的表示方法,如果你用过WPF,你应该很清楚了。
(1)可以用数值,double类型,如120.667,这个数字与屏幕分辨率无关,运行运行库会自行调整;

(2)*:这个星号是什么意思呢?就像上面的例子,我都用了*,这么说是说不清楚的,我举个例子吧。
比如,我把一个网格分为3行,而每一行的高度都是*,则表示三个行的高度是平均分配的,都占整个网格高度的1/3.
如果我第一行的高为2*,第二行的高为*,第三行的高为3*,那么又该如何分配呢?
先别急,把上面的代码改一下,我们就可以直观地看到效果了。为了方便观察,我把ShowGridLines的值改为True,这样网格线就会显示。

[html] 
  1. <Grid x:Name="Root" ShowGridLines="True">  
  2.     <Grid.RowDefinitions>  
  3.         <RowDefinition Height="2*"/>  
  4.         <RowDefinition Height="*"/>  
  5.         <RowDefinition Height="3*"/>  
  6.     </Grid.RowDefinitions>  
  7. </Grid>  

好,现在我们看看设计视图上面显示的结果。

其实上面三行的高分别为2*,1*和3*,1可以省略,它的意思就是把整个网格的高度平均分成2 + 1 + 3 = 6份,而2*就占其中2份,1*就占其中1份,3*就占其中3份,也就是说,它们分别占总高度的2/6,1/6,3/6.
怎么样,找到规律了吗?
再来一例。

[html]
  1. <Grid x:Name="Root" ShowGridLines="True">  
  2.     <Grid.RowDefinitions>  
  3.         <RowDefinition Height="3*"/>  
  4.         <RowDefinition Height="7*"/>  
  5.     </Grid.RowDefinitions>  
  6. </Grid>  

这时候,我们再看看设计视图有啥变化?

 

上面的示例是把整个容器的高度平均分为 3 + 7 = 10 份,而第一行的高度占总高度的3/10,第二行的高度占总高度的7/10.
现在明白了一些了没?
再看看下面的例子:

[html]
  1. <Grid x:Name="Root" ShowGridLines="True">  
  2.     <Grid.RowDefinitions>  
  3.         <RowDefinition Height="86"/>  
  4.         <RowDefinition Height="5*"/>  
  5.         <RowDefinition Height="3*"/>  
  6.     </Grid.RowDefinitions>  
  7. </Grid>  

同理,第一行固定86,这是一个绝对的值,然后呢,把剩下的高度,就是除了86之外的,平均分为 5 + 3 = 8 份,第二行占了剩下的高度的5/8,第三行占了剩下的高度的3/8.

(3)Auto,不用多解释,从单词的含义就知道了,就是根内容自动调整。

列的定义与行是相类似的,只不过列定义宽度,行定义高度而已。
如果以上三种值同时出现呢?原理是一样的,自己思考一下吧,不懂的就多写代码观察。

那么,我们如何把内容放到对应的单元格内呢?Grid的行序号和列序号是从0开始的,如第一列就是0,第二行就是1等,具体怎么操作呢?
在声明其内容时,通过附加属性来确定内容应放在哪个单元格,如下面例子。

[html]
  1. <Grid x:Name="Root" ShowGridLines="True">  
  2.     <Grid.RowDefinitions>  
  3.         <RowDefinition Height="*"/>  
  4.         <RowDefinition Height="*"/>  
  5.     </Grid.RowDefinitions>  
  6.     <Grid.ColumnDefinitions>  
  7.         <ColumnDefinition Width="*"/>  
  8.         <ColumnDefinition Width="*"/>  
  9.     </Grid.ColumnDefinitions>  
  10.     <!-- 内容 -->  
  11.     <TextBlock Grid.Column="0" Grid.Row="0" Text="第1行第1列" FontSize="35"/>  
  12.     <Rectangle Fill="Yellow" Grid.Column="1" Grid.Row="0" Margin="68"/>  
  13.     <Button Grid.Column="0" Grid.Row="1" Content="第2行第1列" FontSize="32"/>  
  14.     <Ellipse Fill="Blue" Height="95" Width="180" Grid.Column="1" Grid.Row="1"/>  
  15. </Grid>  

运行效果如下:

 

 

好了,网格布局就吹到这里,下面接着看另一个较简单的布局——StackPanel,嗯,它是一个面板,它的子内容的布局非常简单,就两种方式:横向和纵向,它是沿直线分布的,要么水平,要么垂直,反正是线性分布,就类似于我们说的数据结构中的栈队列,先进后出。
例一,水平布局。

[html]
  1. <StackPanel Orientation="Horizontal" Height="100">  
  2.     <Button Content="按钮1"/>  
  3.     <Button Content="按钮2"/>  
  4.     <Button Content="按钮3"/>  
  5. </StackPanel>  

效果如下:

 

例二:垂直布局。

[html]
  1. <StackPanel Orientation="Vertical" Width="300">  
  2.     <TextBlock Text="文本一" FontSize="80"/>  
  3.     <TextBlock Text="文本二" FontSize="80"/>  
  4.     <TextBlock Text="文本三" FontSize="80"/>  
  5. </StackPanel>  


运行效果如下:
(图6)运行效果如下:

 

最后,我们来看看还有一种通过绝对定位的布局控件——Canvas。
它就像我们的二维坐标系,但与我们在平面几何中不同的是,Canvas的原点在左上角,相信写过可视化程序的朋友都知道了。
要注意的是,Canvas不知道具体要为哪些子内容设置坐标,所以,它的Top和Left值视具体情况而定,因此这两个属性都是附加属性,也就是它附加在放置在Canvas中的子元素要设置的具本位置而使用,所以每个子元素的定位都通过附加的Canvas.Top和Canvas.Left来设置。

[html]
  1. <Canvas>  
  2.     <Rectangle Fill="Orange" Canvas.Left="37" Canvas.Top="116" Height="165" Width="220" />  
  3.     <Path Data="M0,0 L0,8 L12,8 Z" Fill="Silver"  
  4.           Canvas.Left="127"  
  5.           Canvas.Top="204"  
  6.           Width="260"  
  7.           Height="235" Stretch="Fill"/>  
  8. </Canvas>  


 

还有的是,ZIndex是用于设置子元素的顺序,从0开始,默认为0,值越大,它越在顶层,比如上面的例子,我们发现,后面添加的三角形把前一个矩形挡住了,那如何让矩形在其它图形之上呢?对,把ZIndex设置一个较大的值就行了,如:

[html]
  1. <Canvas>  
  2.     <Rectangle Fill="Orange" Canvas.Left="37" Canvas.Top="116"  
  3.                Height="165" Width="220"  
  4.                Canvas.ZIndex="1"/>  
  5.     <Path Data="M0,0 L0,8 L12,8 Z" Fill="Silver"  
  6.           Canvas.Left="127"  
  7.           Canvas.Top="204"  
  8.           Width="260"  
  9.           Height="235" Stretch="Fill"/>  
  10. </Canvas>  


 

换一批

延伸阅读

[新鲜事] 三星Galaxy将可以指纹解锁任何Windows 10设备

三星Galaxy将可以指纹解锁任何Windows 10设备

韩国手机制造商三星宣布计划扩展支持其流Android应用程序,以支持所有Windows 10设备和4月即将发布的创作者更新。......

关键字:三星 Android Galaxy Windows 10

[新鲜事] 微软:再见了 Windows 7!

微软:再见了 Windows 7!

近日,微软德国在官网发表长博文,标题是《是该早些和Windows 7说再见了(An early Goodbye to Windows 7! Support endet in drei Jahren)》。......

关键字:微软 Windows 7

[真心话] 不比不知道,用苹果Mac竟然比Windows PC要省钱?

不比不知道,用苹果Mac竟然比Windows PC要省钱?

Windows PC使用起来比Mac贵多了,这真不是开玩笑。以IBM为例,近十万员工可以自由的在Windows PC和Mac电脑中选择,不过让人差异的是,近9万名IBM员工在使用Mac电脑,原因只有一个那就是省钱。估计很多人都会这么说,......

关键字:苹果 Mac windows

[新鲜事] 难以置信!美国五角大楼电脑竟还在使用Windows98系统

难以置信!美国五角大楼电脑竟还在使用Windows98系统

众所周知,五角大楼是美国最机密的大楼,而据外媒消息,大楼中的电脑居然多半系统还停留在Windows 95、98上,真是让人难以置信。......

关键字:美国 Windows 98 Windows 10 黑客

[新鲜事] Intel微软联合使坏:新处理器只能用Windows 10

Intel微软联合使坏:新处理器只能用Windows 10

Intel和微软是PC时代的软硬两大霸主,如今虽然各有各的打算,但也会紧密合作,比如在系统支持方面。 ......

关键字:Intel 微软 处理器 Windows 10

[新鲜事] Windows 10以后不会再“蓝屏”了,改为“绿屏”。

Windows 10以后不会再“蓝屏”了,改为“绿屏”。

Win10 Build 14997曝光之后,用户们发先了不少“宝”,比如专门为夜间用户新增了“低蓝光模式”、“鸡血”模式等等。现在,又有一个新的细节被发现:“死机”绿屏。......

关键字:Windows 10 绿屏 死机

[新鲜事] AMD Ryzen在Windows 10下支持不佳 这个锅微软自己背了

AMD Ryzen在Windows 10下支持不佳 这个锅微软自己背了

此前有报道称,AMD Ryzen在Windows 10下支持不佳的情况引起了网友的关注,而据报道,这可能是涉及SMT(同步多线程)的负载分配和缓存出错。而外媒都倾向于把它归咎给微软,也有人愤愤不平,难道AMD自己就一点事也没有?......

关键字:AMD Ryzen Windows 10
条评论

我 要 评 论

网友评论

大家都爱看

  • 华为的优势,就是自家的各种自研芯片

    CPU即中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    2017-08-16
  • 你不知道Ryzen芯片有多火?来看看AMD的股票吧

    据外媒报道,美银美林认为,AMD最新的Ryzen芯片可能会引发一波销售浪潮,进而推动该股继续上涨。它认为AMD股票还有40%以上的上涨空间。

    2017-08-16
  • 国产芯片:厚积薄发,强势崛起

    关于国产芯片,是近几年才有崛起的势头,可是在几年之前,国产芯片还处于“沉睡”的状态,尤其是手机芯片,几乎大部分都依赖进口,而且国外的市场几乎被高通和联发科所垄断,也就展讯还在市场边…

    2017-08-16
  • 为了数据安全 大疆无人机增加隐私飞行功能

    大疆周一表示,在美国陆军因为“网络缺陷”而要求其成员停用大疆无人机后,这家中国无人机制造商将加强无人机的数据安全性。 大疆政策和法务副总裁布伦丹&middot…

    2017-08-15
  • Intel代工 展讯发布14nm SC9853I手机SoC

    SC9853I采用的Intel的14nm FinFET制程,架构为8核64位Airmont架构,主频1.8GHz,GPU为Mali-T820 MP2,号称面向799~1299元档次的手机。…

    2017-08-15