Win10系列:UWP界面布局进阶9-程序员宅基地

Grid

Grid元素用来定义一个由行和列构成的网格,这是一个功能强大的布局容器,当新建一个页面时会默认选用Grid作为顶级布局元素,下面将通过三个示例来介绍Grid的使用方法。

(1)定义Grid的行与列并向Grid中添加元素

可以通过向Grid元素的Grid.RowDefinitions属性元素中添加RowDefinition元素来定义行或向Grid元素的Grid.ColumnDefinitions属性元素中添加ColumnDefinition元素来定义列。下面以一个示例来展示如何定义Grid元素的行与列。

在一个打开的Windows应用商店项目中新建一个空白页,并命名为GridPage,打开GridPage.xaml文件,在默认的Grid元素中添加如下代码:

<Grid Background="Black" Height="300" Width="600">

<Grid.RowDefinitions>

<RowDefinition Height="150"/>

<RowDefinition Height="150"/>

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="300"/>

<ColumnDefinition Width="300"/>

</Grid.ColumnDefinitions>

<Button Grid.Row="0" Grid.Column="0" Height="120" Width="180" HorizontalAlignment="Center" Content="0行第0" FontSize="28"/>

<Button Grid.Row="0" Grid.Column="1" Height="120" Width="180" HorizontalAlignment="Center" Content="0行第1" FontSize="28"/>

<Button Grid.Row="1" Grid.Column="0" Height="120" Width="180" HorizontalAlignment="Center" Content="1行第0" FontSize="28"/>

<Button Grid.Row="1" Grid.Column="1" Height="120" Width="180" HorizontalAlignment="Center" Content="1行第1" FontSize="28"/>

</Grid>    

上面的代码首先在Grid元素的<Grid>标签中设置网格的高度为300px、宽度为600px、背景色为黑色,接下来在Grid元素中分别添加Grid.RowDefinitions属性元素和Grid.ColumnDefinitions属性元素。并在Grid.RowDefinitions属性元素中添加两个RowDefinition元素来定义Grid网格中的两行,并设置行高为150px;在Grid.ColumnDefinitions属性元素中添加两个ColumnDefinition元素定义Grid网格中的两列,并设置列宽为300px。

接着向每一个单元格中添加元素。与HTML中的Table元素不同,Grid中的子元素并不是直接在单元格中定义的,而是直接定义在Grid元素当中,并在子元素的标签中声明该元素所在的单元格位置。在Grid元素中继续添加4个按钮,为每一个Button元素设置Grid.Row属性和Grid.Column属性来确定按钮所在的单元格,并定义按钮显示的文本为所在单元格的位置。需要注意的是,在Grid网格中位于第一行元素的Grid.Row属性值应设置为0,同样,位于第一列元素的Grid.Column属性值也要设置为0。

在添加子元素时,通过设置元素的HorizontalAlignment属性或VerticalAlignment属性还可以定义子元素在父元素内的水平或竖直对齐方式,在水平方向上的可选对齐方式有Left(左对齐)、Right(右对齐)、Center(居中对齐)以及Stretch(拉伸对齐),在竖直方向上的可选对齐方式有Top(顶部对齐)、Buttom(底部对齐)、Center(居中对齐)以及Stretch(拉伸对齐)。本示例将每个Button元素的HorizontalAlignment属性设置为"Center",使按钮处于单元格的水平居中位置。

在设计器中的显示效果如图5-21所示。

图5-21 定义Grid的行与列

(2)合并单元格

有时Grid中的元素需要跨单元格显示,这时可以通过设置元素的Grid.ColumnSpan或Grid.RowSpan属性来定义元素跨越的列数或行数,以实现合并单元格的效果。在上面代码的基础上,对第一个Button元素添加Grid.ColumnSpan属性,将属性值设置为2,表示此元素跨越了两列,即实现了两个单元格的合并。调整原来位于第0行第0列的按钮大小,同时去掉位于第0行第1列的按钮,合并单元格后的代码如下所示:

<Grid Background="Black" Height="300" Width="600">

<Grid.RowDefinitions>

<RowDefinition Height="150"/>

<RowDefinition Height="150"/>

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="300"/>

<ColumnDefinition Width="300"/>

</Grid.ColumnDefinitions>

<Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Height="120" Width="460" HorizontalAlignment="Center" Content="0行第0列跨越两列" FontSize="28"/>

<Button Grid.Row="1" Grid.Column="0" Height="120" Width="180" HorizontalAlignment="Center" Content="1行第0" FontSize="28"/>

<Button Grid.Row="1" Grid.Column="1" Height="120" Width="180" HorizontalAlignment="Center" Content="1行第1" FontSize="28"/>

</Grid>

在设计器中可以看到第0行的两个单元格已经合并为一个,显示效果如图5-22所示。

图5-22合并单元格

(3)动态适应单元格尺寸

在上面的代码中,通过设置行和列的Height和Width属性来定义行高和列宽,除了为单元格的宽高属性赋予固定值外,也可以为宽度和高度属性设置"Auto"或"*" 属性值,这样单元格就可以自动的对行高和列宽进行调整。当设置ColumnDefinition元素的Width属性或RowDefinition元素的Height属性值为"*"时,单元格会自动填充其他单元格显示后剩余的空间;如果设置其属性值为"Auto",单元格会根据其中包含的子元素尺寸的变化自动调整单元格的大小。值得注意的是,"*"属性值可以根据比例大小在Grid网格中分配行或列的可用空间,若定义一列是另一列的3倍宽度,可以分别设置这两个ColumnDefinition元素中的Width属性为"*"和"3*"。

继续调整上面示例的代码,在表示第0列的ColumnDefinition元素中设置Width属性值为200,在表示第1列的ColumnDefinition元素中设置Width属性值为"*",在设计器中显示效果如图5-23所示。

图5-23 自动填充剩余空间

可以看到整个网格的宽度为600px,其中第0列占据了200px,由于设置了Width属性值为"*",第1列会自动填充剩余的400px。

如果将第0列的Width属性值设为"Auto",第1列的Width属性值设为"*",在设计器中显示效果如图5-24所示。

图5-24 根据元素尺寸调整单元格大小

在第1行中按钮的宽度为180px,由于将第0列的Width属性值设置成了"Auto",单元格会自动调整宽度与其中的按钮宽度一致。

以上为读者介绍了三种常用的布局元素,其中有一些属性的使用方法是对所有布局元素通用的,如Margin属性,HorizontalAlignment属性以及VerticalAlignment属性等。在页面元素结构比较复杂时,合理选用布局元素不仅可以提高界面的美观性,还有利于对界面的布局进行维护和扩展。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34217711/article/details/85871510

智能推荐

Spark2.0 读写ES数据(scala)——elasticsearch6.5.4_scala es 框架-程序员宅基地

文章浏览阅读715次。@羲凡——只为了更好的活着Spark2.0 读写ES数据(scala)——elasticsearch6.5.4特别强调楼主使用spark2.3.2版本,elasticsearch6.5.4版本1.准备工作在pom.xml文件中要添加<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-hadoop</artifactId> <ve_scala es 框架

opencv图像特效之毛玻璃_opencv2 毛玻璃特效-程序员宅基地

文章浏览阅读297次。import cv2import numpy as npimport randomimg = cv2.imread("E:/code/conputer_visual/data/0.jpg", 1)cv2.imshow("pre", img)imginfo = img.shapeheight = imginfo[0]width = imginfo[1]dst = np.zeros((height, width, 3), np.uint8)mm = 4for m in range(0, he_opencv2 毛玻璃特效

Java 关于前端传时间格式后台接收不到问题_后端接收不到时间-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏5次。在高级搜索时经常会遇到后台接收不到时间的问题我用的是elment-ui前端配置时间格式<el-date-picker v-model.trim="queryInfo.deadline" value-format="yyyy-MM-dd" placeholder="请选择截止日期" type="date" clearable> </el-date-picker>后端实体类中接收时间格式@ApiModelProperty("截止日期")@DateTimeFor_后端接收不到时间

package.json文件中的scripts配置_package.json scripts 参数配置-程序员宅基地

文章浏览阅读698次。package.json文件的理解_package.json scripts 参数配置

提示OpenGL版本过低怎么办-程序员宅基地

文章浏览阅读2.5w次,点赞9次,收藏17次。(2)下载后得到一个mesa3d-23.1.1-release-msvc.7z文件,解压后里面有一个systemwidedeploy.cmd文件,双击执行,然后按任意键,出现一个菜单,选择1,然后开始安装OpenGL驱动,完事了退出即可,不用重启电脑即可生效。如果你的电脑显卡太旧,那么即使你更新了驱动程序,也无法支持最新的OpenGL。在极端情况下,即使你更新了显卡驱动程序(或者显卡驱动已经是最新的,没有更新的版本可用),也有可能无法解决问题,那么就需要重新下载并安装最新的OpenGL库了。_opengl版本过低怎么办

双系统更新Linux后找不到win启动菜单_linux双系统开机没有windows启动项-程序员宅基地

文章浏览阅读483次,点赞9次,收藏7次。某一天,也就是今天,将win10(活动分区)替换成Linux系统+win11,安装完毕后,启动菜单没有出现熟悉Linux+win11选择菜单,第一块硬盘是ssd装了win10+win11,作启动操作系统用,第二块硬盘是机械盘,作存储数据用。sudo update-grub后,双系统启动菜单出现了。sudo grub-install 无果。sudo update-grub无果。_linux双系统开机没有windows启动项

随便推点

鼠标拖拽盒子跟着鼠标在页面任意位置移动_网页中盒子怎么自由移动-程序员宅基地

文章浏览阅读1k次。鼠标拖拽盒子跟着鼠标在页面任意位置移动_网页中盒子怎么自由移动

网页端接入海康摄像头画面操作指南_如何通过ivms-4200的服务直接在自己的web中播放摄像头视频-程序员宅基地

文章浏览阅读2.6w次,点赞9次,收藏80次。一、摄像头rtsp流画面测试首先根据相关摄像头内附的说明书对摄像头进行安装以及wifi配置或者通过网线直连,配置完成后确保摄像头画面能够在手机APP或者相关应用程序上正常播放。然后进入海康威视官网下载并安装SADP摄像头IP搜索工具。打开SADP(设备网络搜索),即能查看当前局域网下的所有海康摄像头IP地址。下面进行摄像头rtsp流播放测试:1.下载VLC media player,并安装打开。2.打开媒体 --> 网络串流 --> 网络。3.输入海康摄像头的rtsp地址并进_如何通过ivms-4200的服务直接在自己的web中播放摄像头视频

Android中Handler的sendEmptyMessage的理解_sends a message containing only the what value, to-程序员宅基地

文章浏览阅读5.5k次。在写代码的过程中,碰到一行代码不理解,去看了下源码,来记录下。mHandler.sendEmptyMessage(0);sendEmptyMessage这个方法之前没有碰到过,查阅源码后发现: /** * Sends a Message containing only the what value. * * @return Returns true_sends a message containing only the what value, to be delivered after the sp

研究生专业计算机排名2015年,2015年USNews排名 美国研究生计算机专业排名2-程序员宅基地

文章浏览阅读83次。70Case Western Reserve University70College of William and Mary70Colorado State University70Naval Postgraduate School70New York University70Tufts University70University of Delaware70University of Maryl...

多视角立体影像匹配三维重建---- visualSFM的使用方法_多视角匹配修复-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏8次。利用多张影像对小物体进行拍摄,进而进行三维重建,是计算机视觉中的重要问题之一。目前对此研究最全面的网站是:http://vision.middlebury.edu/mview/eval/ 目前最优秀的算法是Furukawa的PMVS2:http://www.di.ens.fr/pmvs/ 目前集成了最优秀的PMVS2的系统是WuChangchang的VisualSFM(含S_多视角匹配修复

【Matlab光伏功率预测】基于WOA-TCN-BiGRU-Attention鲸鱼算法优化时间卷积双向门控循环单元注意力机制多变量光伏功率预测_woa-cnn-lstm-attention鲸鱼多变量光伏发电预测-程序员宅基地

文章浏览阅读137次。【Matlab光伏功率预测】基于WOA-TCN-BiGRU-Attention鲸鱼算法优化时间卷积双向门控循环单元注意力机制多变量光伏功率预测_woa-cnn-lstm-attention鲸鱼多变量光伏发电预测