菜鸟学Windows Phone 8开发(3)——布局和事件基础

简介: 原文 http://www.cnblogs.com/duolete/archive/2013/10/14/3368742.html 本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发  本文地址:http://channel9.

原文 http://www.cnblogs.com/duolete/archive/2013/10/14/3368742.html

 
在这节课中我将谈论布局,也就是说控件式如何被安排在我们应用程序中展示界面的。
我的计划如下:
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来布局控件和边界的距离,最后我们学 习了不同的方法来触发事件和事件处理,以及事件处理方法的参数传递。
目录
相关文章
|
7月前
|
存储 安全 UED
Cyber Triage 3.13 for Windows - 数字取证和事件响应
Cyber Triage 3.13 for Windows - 数字取证和事件响应
200 71
Cyber Triage 3.13 for Windows - 数字取证和事件响应
|
9月前
|
缓存 安全 网络协议
使用事件日志识别常见 Windows 错误
事件查看器是Windows操作系统中的标准诊断工具,用于记录系统事件,包括硬件问题、软件中断和系统行为等详细信息。通过分析这些日志,管理员能够追踪和解决系统错误。访问方法包括使用快捷键Win + R输入eventvwr.msc,或通过控制面板进入。事件查看器中的每条记录包含事件ID、来源和描述,帮助识别和解决问题。常见错误如蓝屏死机、DLL错误、驱动程序错误等,可通过更新驱动程序、运行系统诊断、使用恢复功能等方式解决。
588 4
|
11月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
1240 1
|
11月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
440 0
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
331 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
12月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
680 0
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
1385 0
|
网络安全 C++ Windows
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)
【Windows驱动开发】注册表的基本操作(创建、打开、修改、读取、枚举)(附源码)