在这节课中我将谈论布局,也就是说控件式如何被安排在我们应用程序中展示界面的。
我的计划如下:
1、我将谈论在布局和定位中两个主要的元素:Grid和StackPanel;
2、对于Grid我们将讨论行和列的定义并且你可以使用多种选择和技术来发挥Grid的功能;
3、接下来我们也将学习StackPanel我们将我们的Grid布局转换成StackPanel来学习他们之间的不同点;
4、最后我们将讨论事件怎么在XAML和C#代码中处理
 
1、理解Grid基础
默认的Windows Phone 页面模版会创建一个一个叫ContentPanel的<Grid>元素。
这个Grid是用于其他控件的布局,它允许我们自定义行和列,里面的每一个控件都可以通过指定行和列来布局。
 
现在你会发现在MainPage.xaml的页面模版中<Grid></Grid>是空的,也就是没有行和列的定义,但是它总是有一个行和列的定义,尽管你没有明确定义,它这一行占据整个<Grid></Grid>之间的空间来呈现一个大的空间,任何在Grid></Grid>之间的控件都可以理解为他是在这个大的空间里面。
 
2、Grid的行定义和列定义,以及默认尺寸
一个定义了行的例子是LayoutRoot Grid,它定义了两行;
现在你可以注意在项目和页面标题之间的第一行的StackPanel,他有一个Grid.Row=0的属性,你可以引用一个从0开始的数字方案。
注意第二行叫ContentPanel的Grid,他是设置了Grid.Row=1
 
第一行是设置了高度为Auto第二行是*;有三种语法来设置行和列的尺寸,我特意用了“persuade”术语,,那是因为在XAML布局中,高和宽是相对的,并且他们受许多因素影响,布局引擎要考虑多有的因素来确定元素的布局。
例如,Auto是意味着这一行的高度必须能容纳添加在这一行的所有控件。如果里面最高的控件式150像素,那么这就是实际高度,因此,Auto意思是他的高度取决于这行里面最高的控件的高度。
星号是被叫做“星号尺寸” 意思是这行的高度应该占据整个剩余的可用高度。
这有一个例子使用星号布局的,我们定义三行在ContentPanel中,注意每一行的高度:
 
你会发现在星号前面有一个数字,意思是对于所有的可用空间给我1份2份3份,所有的加起来就是6,所以每一份是可用高度的1/6,因此,3*代表一半的空间,
 
除了Auto和*你还可以指定固定的高和宽。事实上当你只用数字的时候就表示多少像素的高或宽,一般使用固定的数字来确定高和宽是不好的,因为他不能适应不同大小的屏幕,相反使用Auto和*是更可取的。
我想指出的是Grid也有一个列定义的集合,在我创建的GridsRowsAndColumns项目中,你可以看到,它有3行3列:
 
 
另外一件我想提醒你的事是如果你没有指定行和列,那么他将假设第一行和第一列是他们的值,我们可以依赖默认属性让代码更简洁。
 
3、Grid的Alignment和Margin属性
我有另外一个叫AlignmentAndMatgins的项目来说明这个,XAML如下:
效果是:
 
如果你盯着代码看一会而你就会发现它是显而易见的,但是Alignment和Margin他们也有细微(finer)的差别(distinction)首先我们来讲解下VerticalAlignment和HorizontalAlignment是如何在Gid中工作的,_Alignment属性是将控件往边界靠拢,Margin是将控件远离边界。第二个发现是Margin的定义,他是一系列的用逗号分开的数字,这个语法是来自于CSS,这数字代表从左边开始顺时针不同方向据边界的像素。
Margin="10,20,30,40"
意思是:据左边界10,上边界20,右边界30,下边界40,这这个例子中边界值得是那个大的Grid因为他还没定义其他的行和列。
在前面说布局最好使用Auto和*,那为什么现在又用Margin呢,因为Margin是用于指定两个相对元素的空间,他不会影响没页面的整体布局。
 
4、StackPanel基础
第二种布局控件是StackPanel,他将元素从上到下布局。
回到PetSounds项目中,我们在里面定义下下面的StackPanel的代码,
 
他们占据整个grid的宽度,并且在垂直方向上堆叠现在让我们改变我们的ContentPanle:
 
将Grid变成StackPanel
 
这个改变只移动了Meow Button在垂直方向上,
 
如果我们一处Quack Button按钮的Width和HorizontalAlignment属性,同时我们也移除Background属性:
并且在C#代码中注释掉Meow Button的Width和HorizontalAlignment属性和Margin属性:
然后你将看到两个Button垂直的堆叠布局在StackPanel中,
 
因此正如你看到的你可以实现你想要的任何布局,只需要通过设置4个属性:
1、一个包含行和列定义的Grid;
2、StackPanel
3、Margin来布局他们四个方向离边界的距离;
4、水平和垂直对齐属性
这就是XAML布局的简单概括,接下来让我们继续学习事件
 
5、理解事件
如果你以前在Channel9看过c#基础系列,我们是在最后一节课讲解的事件,在Windows Phone API中,页面和控件触发事件在整个生命周期或者用户触发的过程中是一个重要的部分。在这个系列中我们已经在PlayAudioButton中讲过Click事件,我们称它为事件处理,我们使用事件处理术语,我们仅仅是将一个方法关联到一个事件。我们使用wired up意思是事件被绑定到一个特定的事件处理方法,一些事件能被用户触发,比如Click事件,另外一些事件发生在整个生命周期中,比如Loaded事件发生在整个页面或空间的实力被Phone API运行时引擎创建完毕时发生。
 
有两种方法将页面或空间的事件关联到处理方法,一个是通过Xaml语法,我们已经在前面的PlayAudioButton中使用过:
 
如果你还记得,我们输入
Click=""
我们在输入双引号的时候智能感知会问我们是否选着或创建一个事件处理,如果我们告诉他我们想创建一个事件处理Visual Studio就会使用事件命名方法:NameOfElement_EventName因此在我们的例子中就得到PlayAudioButton_Click。
同时Visual Studio也会在后台代码MainPage.xaml.cs中创建一个方法,这只是Visual Studio的自动感知行为,我们也可以按Esc来推出这种行为我们自己手写命名。
第二种方法是使用事件处理窗口:
 
1、首先你要确保你已经选择了这个控件,控件的名字将出现在Name的地方一边提示你在为谁添加事件,也就是说你的任何对于PlayAudioButton的设置都将反应在页面的代码中。
2、点击闪电(lithtening bolt)样的图标,将切换到事件的属性名和值列表。
3、在一个指定的Textbox中双击创建控件的事件和事件处理,双击后将会自动创建一个事件名字和在后台代码创建一个方法。
 三步后你将创建一个事件处理方法在35行的c#代码中
 
+=是用于加和设值,应此x+=1等同于x=x+1
在某种意义上他们是一样的,我们是想给点击事件添加和设置一个或多个事件处理方法,是的我们的Click可以设置多个处理方法,意思是当事件被触发的时候他的事件啊列表就会一一被执行,一个事件能触发一个或多个方法。在我们的应用中我们只希望触发一个方法,你可能会说为什么不这样设置:
myButton.Click += PlayAudioButton_Click();
注意后面的(),这是一个方法的调用而我们这里只需要告诉我运行时执行我们的方法而不是调用它的实例,
另外一个有趣的是:我们指定了两个事件执行同一个方法,那我们怎么确定他是被哪个空间执行的呢?
如果你看到下面的代码:

private void PlayAudioButton_Click(object sender, RoutedEventArgs e)
{

}

Windows Phone运行时将会传递一个Sendr参数。因为我们可以将事件和任何空间关联,sender就是源类型,我们需要做的事情是确定他是什么类型,比如是Button还是Rectangle控件的时间,我们确定之后,我们就可以调用他们的属性了。
这种方法签名是Windows PhoneAPI的典型的一种,除了Sender参数外还有RoutedEventArgs类型来传递一些额外的信息.在很多场景中你都会看到这个情况。但是我不保证在这个系列中你能看到。
 
回顾
这节课重点是讲解了页面和控件的布局,对于Grid布局我们学习了使用Auto,星号和像素来设置高和宽,我们学习了使用HorizontalAlignment和VerticalAlignment属性来是空间和边界对齐,Margin来布局控件和边界的距离,最后我们学习了不同的方法来触发事件和事件处理,以及事件处理方法的参数传递。
 
 
 
 
 
 
 
 
 

菜鸟学Windows Phone 8开发(3)——布局和事件基础的更多相关文章

  1. 菜鸟学Windows Phone 8开发(4)——设置应用程序样式

    本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发  本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develo ...

  2. 菜鸟学Windows Phone 8开发(1)——创建第一个应用程序

    本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发 主要是想通过翻译本系列文章来巩固下基础知识顺带学习下英语和练习下自己的毅力(因为打算每天翻译一篇,但是发现翻译这篇花费了 ...

  3. 菜鸟学Windows Phone 8开发(2)——了解XAML

    本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发 主要是想通过翻译本系列文章来巩固下基础知识顺带学习下英语和练习下自己的毅力 本文地址:http://channel9.m ...

  4. Windows Phone 8初学者开发—第5部分:布局和事件基础

    原文 Windows Phone 8初学者开发—第5部分:布局和事件基础 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developme ...

  5. 【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)

    [图书推荐] 译名:Windows 8应用开发:C#和XAML卷 原名:Building Windows 8 Apps with C# and XAML   编辑推荐 国内第一本使用XAML与C#语言 ...

  6. 手摸手带你学移动端WEB开发

    HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 手摸手带你学移动端WEB开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/Ro ...

  7. Windows搭建python开发环境,python入门到精通[一]

    从大学开始玩python到现在参加工作,已经有5年了,现在的公司是一家.net的公司用到python的比较少,最近公司有新项目需要用到python,领导希望我来跟其他同事training,就有了这篇博 ...

  8. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

    菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...

  9. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

随机推荐

  1. Maven学习总结(四)——Maven核心概念--转载

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...

  2. Distributed Result Grouping Caveats

    Distributed Result Grouping Caveats Grouping is supported distributed searches, with some caveats: 1 ...

  3. WindowsPhone-GameBoy模拟器开发四--Gameboy显示系统分析

    这次说一下GB的显示系统,先从一幅Gb的内存分布图说起,请看图: 图中红色框框起来的部分就是这篇文章关注的部分,这一部分的内存地址从8000-9Fff,共8KB,这一部分是从来存储背景和游戏“精灵”的 ...

  4. https SSL主流数字证书都有哪些格式?

    主流数字证书都有哪些格式? 一般来说,主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java. Tomcat.Weblogic.JBoss等,使用Java提供的密码库.通过Java的 ...

  5. C# 遍历DLL导出函数

    C#如何去遍历一个由C++或E语言编写的本地DLL导出函数呢 不过在这里我建议对PE一无所知的人 你或许应先补补这方面的知识,我不知道为什么PE方面的 应用在C#中怎么这么少,我查阅过相关 C#的知识 ...

  6. 解决 The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

    到 http://tomcat.heanet.ie/native/ 下载最新的tcnative-1.dll放到相应目录即可,我目前下载的是 http://tomcat.heanet.ie/native ...

  7. js数据类型判断和数组判断

    这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...

  8. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  9. MediaElement视频控制:播放、暂停、停止、后退、快进、跳转、音量

    /* =================================================  * Author:     Micro  * Date:       2016=03-25 ...

  10. 2.C#中泛型在方法Method上的实现

    阅读目录   一:C#中泛型在方法Method上的实现 把Persion类型序列化为XML格式的字符串,把Book类型序列化为XML格式的字符串,但是只写一份代码,而不是public static s ...