Windows phone 7之页面布局

Windows phone的页面布局方式一般是依赖布局控件实现的,而布局控件有三种Grid,StackPanel和Canvas

Grid是网格布局方式,相当于一个表格,有行和列,新建一个Windows phone项目,打开MainPage.xaml,页面呈现内容的核心代码如下

<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>
</Grid>

看到代码中用的了两种布局方式Grid和StackPanel,这也是windows phone最常用的两种布局方式,在布局中Canvas不常用,当然这不代表他没用,在一些xaml绘制logo,那Canvas在核实不过了,Grid和StackPanel无法将之取代。

1、Grid

看下面的代码

<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="Grid" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="left top"/>
<TextBlock Grid.Column="1" Text="center top"/>
<TextBlock Grid.Column="2" Text="right top"/>
<TextBlock Grid.Row="1" Text="left center"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="center center"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="right center"/>
<TextBlock Grid.Row="2" Text="left bottom"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="center bottom"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="right bottom"/>
</Grid>
</Grid>

运行效果如下图

在name为ContentPanel的Grid中加入三行三列,<Grid.RowDefinitions>也是一个容器,在内部放几个RowDefinition,就表明Grid有几行,<Grid.ColumnDefinitions>中放几个ColumnDefinition就有几列看
还有就是,RowDefinition只是用来定义列的,列中的内容不是直接放在RowDefinition标签下,而是放在Grid标签下,通过Grid.Row和Grid.Column来定义内容属于哪一行哪一列,默认是第0行,第0列,所以如果是放在0行Grid.Row可以不用写,如果是放在0列Grid.Column不用写,就想上面的代码。

Grid中RowDefinition能够定义Height属性,表示高度,不能定义宽度,ColumnDefinition能够定义Width,表示宽度,不能定义高度,所以最终的宽度和高度是两者共同决定的

Height和Width属性是枚举类型,可以有三个选项,填入具体是,就是固定的高或宽,填入Auto关键字,就是根据行和咧中的子空间的高和宽决定,一最大的为准,填入星号*,就是占据剩余部分,比如我第一行,Height填入100,升入两行诗*,则表明第一行为100,二三行平分Grid剩余的部分,比如Grid的Height是500,那剩余的部分就是400,而三行每行200.

实际中很少出现特别正规的行列分布,往往有的子控件要跨行或跨列,Grid.RowSpan表示跨行,Grid.ColumnSpan表示跨列

看下面的代码

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.RowSpan="2" VerticalAlignment="Center" Text="left top"/>
<TextBlock Grid.Column="1" Text="center top"/>
<TextBlock Grid.Column="2" Text="right top"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="center center"/>
<TextBlock Grid.Row="1" Grid.Column="2" Text="right center"/>
<TextBlock Grid.Row="2" Text="left bottom"/>
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" Grid.Column="1" Text="center bottom"/>
</Grid>

运行效果如下图

2、StackPanel

StackPanel是一个比较简单的容器,可以将子控件进行横排或竖排(默认是竖排),不能同时横排和竖排,如果是想实现横排和竖排一起出现的效果,就要使用子控件嵌套活着布局控件嵌套

Orientation属性是一个枚举类型,Horizontal表示横排,Vertical表示竖排

看下面的代码和运行效果

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Text="left" Width="100"/>
<TextBlock Text="center" Width="100"/>
<TextBlock Text="right" Width="100"/>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Row="1">
<TextBlock Text="top" Height="100"/>
<TextBlock Text="center" Height="100"/>
<TextBlock Text="bottom" Height="100"/>
</StackPanel>
</Grid>

3、Canvas

Canvas是画布布局方式,是一个绝对定位的布局控件,他是以左上角(0,0)为标准,将子控件摆放到其中,用Cancas.eft和Cancas.Right决定距离左上角的偏移量,可以是负值,如果出现控件重叠的状况可以通过Canvas.Zindex属性控制,Zindex大的会覆盖小的

看下面代码和运行效果

<Canvas>
<TextBlock Canvas.Left="0" Canvas.Top="10" Text="textblock1"/>
<StackPanel Canvas.ZIndex="2" Canvas.Left="0" Canvas.Top="10" Background="Red">
<TextBlock Text="hello"/>
</StackPanel>
<TextBlock Canvas.Left="100" Canvas.Top="100" Text="textblock2"/>
<TextBlock Canvas.Left="300" Canvas.Top="300" Text="textblock3"/>
</Canvas>

另外,每个控件都有布局的属性,Margin之类的接下来的文章中将介绍不同控件的用法和属性,会介绍布局属性,今天的内容中,有关布局属性,不是很明白的童鞋不用急

 

我的新浪微博昵称是“@马蔬菜”,希望大家多关注,谢谢

 

转载于:https://www.cnblogs.com/xiaogeer/archive/2012/04/03/2430749.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑删除软件_软件自动开启很烦人?如何彻底关掉开机自动开启的应用程序...

使用Mac的小伙伴有没有这样的烦恼&#xff0c;电脑一开机&#xff0c;一堆烦人的软件就自动开启了&#xff0c;让人很懊恼&#xff0c;如何才能彻底关掉开机自动开启的应用程序&#xff1f;mac开机启动项怎么设置&#xff1f;开机启动项要怎么禁止&#xff1f;今天就带大家解决…

UVALive2678子序列

UVALive2678 http://122.207.68.93:9090/csuacmtrain/problem/viewProblem.action?id453 【题目描述】&#xff1a;n个正整数组成的序列。给定整数S&#xff0c;求长度最短的连续序列&#xff0c;使他们的和大于等于S。 【算法分析】&#xff1a; 【二分】&#xff1a; 全是…

Jupyter notebook 使用过程中的一些小技巧总结

Jupyter notebook 小技巧 这是自己使用Jupyter notebook 的过程&#xff0c;遇到的一些问题&#xff0c;还有一些使用的小技巧&#xff0c;希望可以帮且大家。会不定时更新 code 转 markdown&#xff1a; 按键 M code 转 markdown&#xff1a; 按键 Y 换行&#xff1a;打完一…

IOS 文件读取4种方法 转字符串 和data

//第一种方法&#xff1a; NSFileManager实例方法读取数据NSArray* paths NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);NSString* thepath [paths lastObject];thepath [thepath stringByAppendingPathComponent:"fd_list.txt&qu…

csgo怎么控制电脑玩家_电脑远程控制怎么弄

本教程以“Win 10”系统为例进行演示。方法一&#xff1a;1/6在“此电脑”单击鼠标右键选择“属性”2/6在弹出窗口中点击“远程设置”3/6勾选“允许远程协助连接这台计算机”&#xff0c;然后点击应用并确定4/6在微软小娜搜索“mstsc”5/6打开“远程桌面连接”6/6输入对方的IP地…

HTML 5 的自定义 data-* 属性和jquery的data()方法的使用

HTML 5 的自定义 data-* 属性和jquery的data()方法的使用 人们总喜欢往HTML标签上添加自定义属性来存储和操作数据。但这样做的问题是&#xff0c;你不知道将来会不会有其它脚本把你的自定义属性给重置掉&#xff0c;此外&#xff0c;你这样做也会导致html语法上不符合Html规范…

java。接口和抽象类区别

接口和抽象类区别 a.抽象类里可以有非抽象方法 接口里只能有抽象方法 b.接口是抽象类的变体&#xff0c;再接口中所有方法都是抽象的转载于:https://www.cnblogs.com/zhaozhaozhang/p/5759714.html

MNIST 手写数字识别,我是如何做到886个可训练参数,识别率达到98.2%? (参数、模型压缩), Keras实现,模型优化

一 项目展示 下面可以看到验证集可以到了0.9823了&#xff0c;实际上&#xff0c;在下面的另外一个训练&#xff0c;可以得到0.9839&#xff0c;我保守的写了0.982 二 项目参数展示 我们先来看看LeNet 5 的结构与参数&#xff0c;参数有61&#xff0c;706个。 这个是我用…

javascript 计算两个坐标的距离 米_土方全面应用计算

各种土方量的计算方法汇总8.2.1 DTM法土方计算由DTM模型来计算土方量是根据实地测定的地面点坐标(X&#xff0c;Y&#xff0c;Z)和设计高程&#xff0c;通过生成三角网来计算每一个三棱锥的填挖方量&#xff0c;最后累计得到指定范围内填方和挖方的土方量&#xff0c;并绘出填…

VS2008 AJAX控件介绍

1 Accordion 2 AccordionPane 实现多面板&#xff0c;每次都只显示一个&#xff0c;其他收藏起来&#xff0c;可以设置显示隐藏的时间和渐变效果哦 3 AlwaysVisibleControlExtender 这个东西是将VerticalSide的值设置好后无论页面的滚动条滚动&#xff0c;这个目标控件一直都显…

py文件转exe时包含paramiko模块出错解决方法

问题描述&#xff1a;python代码中包含paramiko模块的远程登录ssh&#xff0c;在用pyInstaller转为exe时报错&#xff0c; 报错提示为“No handlers could be found for logger "paramiko.transport" 出错位置&#xff1a; ssh paramiko.SSHClient() ssh.set_missin…

unity 阳光插件_网络广告,阳光创信保驾护航

网络广告 就找阳光创信。网络营销的技术基础主要是以计算机网络技术为代表的信息技术。计算机网络是现代通信技术与计算机技术相结合的产物&#xff0c;它把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络&#xff0c;从而使众多的计算机…

第2章 Python 数字图像处理(DIP) --数字图像基础1 - 视觉感知要素 - 亮度适应与辨别

数字图像基础1视觉感知要素亮度适应与辨别import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from PIL import Imageprint(f"Python version: {sys.version}") print(f"Numpy version: {np.__version__…

快速幂与快速乘法

List 快速幂与快速乘法 ListKnowledge快速幂 原理code快速乘法 原理codeKnowledge 快速幂 原理 a^b%p 采用二进制得思想&#xff0c;将b转化为二进制数。 b c02^0c12^1c22^2c32^3……cn2^n a^b a^(a12^0)a^(c12^1)……a^(cn2^n) 所以我们可以在log(b)的时间内求出a^(2^0)…

Java程序设计 图形用户界面 小巫版简易计算器

/** 作者&#xff1a;wwj 时间&#xff1a;2012/4/13 功能&#xff1a;实现一个计算器应用程序实验要求&#xff1a;编写一个模拟计算器的应用程序&#xff0c;使用面板和网格布局&#xff0c; 添加一个文本框&#xff0c;10个数字按钮&#xff08;0~9&#xff09;&#xff0c;…

phpcms文件结构

主要目录部分 /admin 管理后台目录 -- /skin/ 后台样式 -- /templates/ 后台样式模板/api api接口 /corpandresize 在线图片处理 -- /css/ csss样式 -- /images/ 图片 -- /js/ 引用js文件 -- /tmp/ 临时文件/data 数据缓存…

第1章 Python 数字图像处理(DIP) --绪论

Python 数字图像处理 关于本专栏 此专栏为 Python 数字图像处理&#xff08;DIP&#xff09;&#xff08;冈萨雷斯版&#xff09;&#xff0c;专栏里文章的内容都是来自书里&#xff0c;全部手打&#xff0c;非OCR&#xff0c;因为很多公式&#xff0c;都是用LaTex输入&#xf…

phython在file同时写入两个_轻松支撑百万级数据点写入 京东智联云时序数据库HoraeDB架构解密...

本文将通过对时序数据的基本概念、应用场景以及京东智联云时序数据库HoraeDB的介绍&#xff0c;为大家揭秘HoraeDB的核心技术架构和解决方案。首先我们来了解下时序数据库的基本概念。时序数据库全称时间序列数据库&#xff0c;主要用于处理带时间标签的数据&#xff0c;带时间…

飞雪迎春

转载于:https://www.cnblogs.com/ysx4221/p/3537810.html

高可用集群技术之corosync应用详解(一)

Corosync概述:Corosync是集群管理套件的一部分&#xff0c;它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件&#xff0c;2008年推出&#xff0c;但其实它并不是一个真正意义上的新软件&#xff0c;在2002年的时候有一个项目Ope…