`
feipigwang
  • 浏览: 744792 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

第一部分:基础知识(第一章)标准的Silverlight文件

阅读更多

你可以在Visual Studio的中解决方案资源管理中查看加载的项目。你会看到两对骨架文件:App.xaml的和App.xaml.cs,和MainPage.xaml和MainPage.xaml.cs。App.xaml和MainPage.xaml是扩展应用程序标记语言(XAML)文件,而App.xaml.cs和MainPage.xaml.cs是C#代码文件。这种奇特的命名计划是在暗示,这是C#代码与XAML文件关联的方式。C#提供隐藏的逻辑,XAML提供支持代码的标记。这是最基本的Silverlight概念。

clip_image002

现在我们来遍历这4个文件,如果你查看App.xaml.cs文件,你会看到关于命名空间的定义和类

Silverlight Project: SilverlightHelloPhone File: App.xaml.cs (excerpt)

namespace SilverlightHelloPhone

{

public partial class App : Application {

public App()

{ …

InitializeComponent();

… } …

}

}

所有的Silverlight应用程序包含一个继承自Application的类,这个类执行应用程序范围内的初始化,启动和关闭事务。你会发现这是应该分部类,也就是说,该项目应该包括其他的C#文件,那个文件中包含应用程序类的其他成员。但它在哪里?

我们在项目中可以看到还有一个App.xaml文件,该文件的结构看起来像

Silverlight Project: SilverlightHelloPhone File: App.xaml (excerpt)

<application><p>x:Class="SilverlightHelloPhone.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"&gt; … </p> <p></p></application>

你会发现这个文件是XML文件,不过更准确地说是用于定义 Silverlight 规划的XAML 文件。开发人员通常使用 App.xaml 文件存储在应用程序中使用的资源。这些资源可能包括配色方案、 渐变画笔、 风格,等等。

根元素是Application,描述了Silverlight的应用程序的父类。根元素包含四个XML命名空间声明。两个是所有Silverlight应用程序都具有的,两个仅仅只有Phone应用程序有。

第一个xmlns是Silverlight的标准命名空间,它可以帮助编译器定位和识别应用程序本身,如Silverlight类。如同大多数XML命名空间声明,此URI实际上并不指向任何东西,它只是一个URI,由微软进行定义。

第二个XML命名空间声明是指这个应用本身,它允许引用文件中的一些元素和属性的XAML的一部分,而不是具体的Silverlight。按照惯例,这个命名空间的前缀是x(意为“的XAML”)。

其中属性以x为前缀的是引用的XAML类,这往往是发音为“xclass”。在这个的XAML文件x:class是指定的名称SilverlightHelloPhone.App。这是一个在.NET中的类。

根元素说明SilverlightHelloPhone从Application继承。这是你定义在在App.xaml.cs文件相同的含义,只是语法不同。

App.xaml文件和App.xaml.cs文件都定义两个半的App类。所以在编译过程中,Visual Studio会对App.xaml进行解析,并生成另一个代码文件名为App.g.cs.文件,其中“g”代表“产生的”,如果你想看看这个文件,你可以在项目的\ obj\Debug子目录中找到。这个App.g.cs文件包含了的App类的另一部分定义,它包含一个名为的InitializeComponent方法,是从文件中App.xaml.cs构造函数调用。

你可以很自由的编辑App.xaml的文件和App.xaml.cs文件,但你不要去改动App.g.cs文件,这个文件在编译时依据项目生成的。

当一个程序运行时,App class先创建一个PhoneApplicationFrame类型并设置该对象自身的RootVisual属性。这个框架为480像素宽,800像素高,占据了整个手机显示器表面。PhoneApplicationFrame对象的行为有点像一个Web浏览器导航一个叫MainPage对象。

MainPage是Silverlight应用程序中第2个大类,其有MainPage.xaml和MainPage.xaml.cs中定义。在小型的Silverlight应用中,这两个文件将占据你工作的大部分内容。

除了很冗长的 using 指令外, MainPage.xaml.cs 文件是非常简单的:

Silverlight Project: SilverlightHelloPhone File: MainPage.xaml.cs (excerpt)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using Microsoft.Phone.Controls;

namespace SilverlightHelloPhone

{

public partial class MainPage : PhoneApplicationPage

{

// Constructor

public MainPage()

{

InitializeComponent();

}

}

}

在代码中,我们可以看到,这个Silverlight类引用了System.Windows命名空间,有时候我们还需要引入其他命名空间。Microsoft.Phone.Controls命名空间包含了PhoneApplicationPage。

自然,我们也看到了另一个MainPage分部类的定义,这个类是PhoneApplicationPage子类。当你运行时,你看到的视觉效果就是由这个类来实现的。

MainPage类的另一半是在 MainPage.xaml 文件中定义的。以下是去掉了注释的改文件内容:

Silverlight Project: SilverlightHelloPhone File: MainPage.xaml (almost complete)

<phoneapplicationpage><p>x:Class="SilverlightHelloPhone.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" </p> <p>mc:Ignorable="d" </p> <p>d:DesignWidth="480" </p> <p>d:DesignHeight="768" </p> <p>FontFamily="{StaticResource PhoneFontFamilyNormal}" </p> <p>FontSize="{StaticResource PhoneFontSizeNormal}" </p> <p>Foreground="{StaticResource PhoneForegroundBrush}" </p> <p>SupportedOrientations="Portrait" </p> <p>Orientation="Portrait" shell:SystemTray.IsVisible="True"&gt;</p> <p><!--LayoutRoot is the root grid where all page content is placed--> </p> <p><grid x:name="LayoutRoot" background="Transparent"></grid></p> <p><grid.rowdefinitions></grid.rowdefinitions></p> <p><rowdefinition height="Auto"></rowdefinition></p> <p><rowdefinition height="*"></rowdefinition></p> <p> </p> <p><!--TitlePanel contains the name of the application and page title--> </p> <p><stackpanel><p>x:Name="TitlePanel" </p> <p>Grid.Row="0" </p> <p>Margin="12,17,0,28"&gt; </p> <p><textblock x:name="ApplicationTitle"><p>Text="MY APPLICATION" </p> <p>Style="{StaticResource PhoneTextNormalStyle}"/&gt; </p> <p><textblock x:name="PageTitle"><p>Text="page name" </p> <p>Margin="9,-7,0,0" </p> <p>Style="{StaticResource PhoneTextTitle1Style}"/&gt; </p> <p></p></textblock></p></textblock></p></stackpanel></p> <p><!--ContentPanel - place additional content here--> </p> <p><grid x:name="ContentPanel"><p>Grid.Row="1" </p> <p>Margin="12,0,12,0"&gt; </p> <p></p></grid></p> <p> </p> <p></p></phoneapplicationpage>

前四个XML命名空间声明和在App.xaml里的相同。同App.xaml文件一样,一个x:Class属性也出现在根元素。在这里,它表明,SilverlightHelloPhone.MainPage类从Silverlight PhoneApplicationPage类派生。这PhoneApplicationPage类需要自己的XML命名空间声明,因为它不是一个标准的Silverlight的一部分

d(表示设计),mc(表示标记兼容性)在XAML定义时使用,当使用Expression Blend或Visual Studio设计时,会自己完成。DesignerWidth和DesignerHeight属性,在编译时被忽略。

程序编译后生成MainPage.g.cs (同样你可以在 \obj\Debug 子目录中找到他),从 MainPage.xaml.cs 中的构造函数中调用 InitializeComponent 方法。

理论上,在生成过程中生成的 App.g.cs 和 MainPage.g.cs 文件仅供编译器内部使用,程序员可忽略。然而,有时程序引发异常,这些文件中的一个会弹出到视图中。它可能会帮助您解决理解那些奇怪的出错的原因。但不要尝试编辑这些文件,以解决问题 !真正的问题是很可能在相应的 XAML 文件中。

在 MainPage.xaml 的根元素中,您将看到 FontFamily、 FontSize和Foreground将应用于整个页面设置。我将介绍 StaticResource 和本第 7 章中的语法。

MainPage.xaml 文件的正文包含了些嵌套的元素:Grid、 StackPanel 和 TextBlock。

我使用“element”这个词,在 Silverlight 编程中这个词有两个相关的意思。一是一个 XML 术语,用来指示由分隔的项目开始标记和结束标记。但它也是在 Silverlight 中用于可视对象引用的一句话,事实上, Silverlight 类中有两个element。

许多在 Silverlight 中使用的类是这个重要的类层次结构的一部分:

Object

DependencyObject (abstract)

UIElement (abstract)

FrameworkElement (abstract)

除了 UIElement,很多其他 Silverlight 类也从 DependencyObject 派生。UIElement 是Silverlight的核心类(在 Silverlight,所有可视对象都可以接收用户输入)和触摸手机的接受屏幕消息不同,该类接受来自用户自键盘和鼠标的输入。

从 UIElement 派生的唯一类是 FrameworkElement。这两个类之间的区别是一个是 WPF(Windows Presentation Foundation)的历史产物。在 WPF 中,允许开发人员从 UIElement 派生创建其自己框架通过。在 Silverlight 这不可能,所以这种区分是完全没有任何意义。

System.Windows.Controls中的很多类都是继承自UIElement的唯一子类FrameworkElement。所以这些类称为其他编程环境中的控件比称为Silverlight 中的元素要贴切的多。第 10 章控制衍生品包括按钮和我将讨论的滑块

从 FrameworkElement 派生的另一类是Panel,其实在 MainPage.xaml 中看到的Grid和 StackPanel 元素的父类。Panel可以承载多个元素并在屏幕上布局。我会更深入讨论在第9章面板。

从 FrameworkElement 派生的另一类是 TextBlock ,这是最常使用的元素。在 MainPage.xaml 中的两个 TextBlock 元素在新的 Silverlight 程序中显示标题文本的两个的区块。

PhoneApplicationPage, Grid, StackPanel, 和 TextBlock 都Silverlight 的类.我们可以在XAML中已XML 元素和属性的方式进行定义。

在MainPage.xaml元素的嵌套定义一个:可视树(visual tree)。在Silverlight的WindowsPhone 7方案中,可视树是一个PhoneApplicationFrame对象,其占整个手机的视觉表面。WindowsPhone7 Silverlight的程序总是有且只有一个PhoneApplicationFrame。PhoneApplicationFrame简称非正式的框架。

与此相反,一个程序可以有PhoneApplicationPage的多个实例,称为非正式页。在任何一个时间,帧只有一个激活页面,但可以让你浏览到其他网页。默认情况下,页面并不充满画面,因为它使系统托盘的空间在手机顶部(也称为状态栏)。

我们简单的应用程序只有一个页面,相应地称为MainPage。在这个MainPage以树层次描述包含了:Grid、 StackPanel、TextBlock元素。一个Visual Studio创建的Silverlight可视化树程序是:

PhoneApplicationFrame

PhoneApplicationPage

Grid named “LayoutRoot”

StackPanel named “TitlePanel”

TextBlock named “ApplicationTitle”

TextBlock named “PageTitle”

Grid named “ContentPanel”

分享到:
评论

相关推荐

    SilverLight2完美征程(3章)

    本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第Ⅰ部分介绍了Silverlight的基础知识、控件模型及它在绘图...

    silverlight书籍_SL2完美征程1-4章

    本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第I部分介绍了Silverlight的基础知识、控件模型及它在绘图...

    C#测试驱动开发(中文清晰版)

    第Ⅱ部分 将基础知识变为行动 第 6 章 启动示例应用程序 第 7 章 实现第一个用户情景 第 8 章 集成测试 第Ⅲ部分 TDD方案 第 9 章 Web上的 TDD 第 10 章 测试 WCF 服务 第 11 章 测试 WPF 和 ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    第一部分 核心概念 第1章 ASP.NET简介 1.1 ASP.NET的7大要点 1.1.1 要点1:ASP.NET是同.NETFramework集成在一起的 1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 1.1.3 要点3:ASP.NET支持多语言 ...

    ASP.NET4高级程序设计(第4版) 3/3

    第一部分 核心概念 第1章 ASP.NET简介 2 1.1 ASP.NET的7大要点 2 1.1.1 要点1:ASP.NET是同.NETFramework集成在一起的 2 1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 3 1.1.3 要点3:ASP.NET...

    ASP.NET.4揭秘

    第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件12 1.2.3 理解和处理...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 2/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 1/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 3/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 6/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 4/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

    Visual Basic 2008/2010 高级编程(第5版)(高清PDF 330MB) 5/6

    第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...

Global site tag (gtag.js) - Google Analytics