`
feipigwang
  • 浏览: 772526 次
  • 性别: 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”

分享到:
评论

相关推荐

    Essential Silverlight 中文版 第一到四章

    《Essential Silverlight 中文版》的前四章主要涵盖了WPF基础、Silverlight入门、Silverlight工具以及XAML基础知识,这些都是理解Silverlight开发的重要概念。 **第一章:WPF基础** WPF,全称为Windows ...

    Silverlight初学者的入门课程

    #### 第一章:什么是Silverlight? - **定义与历史**:Silverlight是由微软公司开发的一款基于Web的技术,首次发布于2007年4月。它旨在作为Adobe Flash的一个强有力的竞争者,提供跨浏览器、跨平台的多媒体应用体验...

    SilverLight2完美征程(3章)

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

    Hello! Silverlight 4

    - **第1章:你好,Silverlight** - 介绍了Silverlight的基本概念,包括它的历史、特性以及为什么选择Silverlight进行开发。 - **第3章:Silverlight 4中的数据服务** - 探讨了如何在Silverlight应用程序中集成和操作...

    beginning silverlight 4 in C#

    - **第一章:Silverlight 4简介**:介绍Silverlight的基本概念和发展历程,以及Silverlight 4相比之前版本的主要改进之处。 - **第二章:环境搭建与工具介绍**:指导读者如何安装Visual Studio等开发工具,并设置...

    Silverlight 3 Programmers Reference Aug 2009

    **第一章:Silverlight 概览** - **介绍**:这一章将为读者提供 Silverlight 的背景信息,包括它的历史、功能以及与其它平台(如 Flash 和 AJAX)相比的优势。 - **安装与配置**:详细介绍如何安装 Silverlight 开发...

    Beginning.Silverlight.5.in.C#

    - **第1章:欢迎使用Silverlight 5**:介绍Silverlight 5的基本概念、功能和架构。 - **第2章:Visual Studio 2010简介**:介绍如何使用Visual Studio 2010进行Silverlight项目的创建和管理。 - **第3章:...

    Professional Visual Studio 2012.pdf

    - 第1章:快速游览 - 第2章:解决方案资源管理器、工具箱和属性 - 第3章:选项和自定义 - 第4章:Visual Studio工作空间 - 第5章:查找和替换以及帮助系统 #### 第二部分:入门指南 (Getting Started) - 第6章:...

    Silverlight初学者的入门课程(带目录).pdf

    #### 第一章:什么是Silverlight? - **定义与历史**:Silverlight是由微软公司开发的一款基于Web的技术,首次发布于2007年4月。作为Adobe Flash的强大竞争对手,Silverlight旨在提供跨平台、跨浏览器的多媒体体验...

    Microsoft Silverlight 5 Building Rich Enterprise Dashboards

    #### 第一章:Silverlight技术概览 在第一章中,作者介绍了Silverlight 5.0平台,并指导读者如何构建Silverlight应用程序。Silverlight是一个强大的跨浏览器、跨平台的框架,用于开发富互联网应用(RIA)。它提供了一...

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

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

    Pro Business Applications with Silverlight 5, Second Edition

    - **第1章:开始使用Silverlight**:介绍Silverlight的基本概念和技术优势。 - **第2章:XAML入门**:解释XAML的基础知识及其在Silverlight中的作用。 - **第3章:导航框架**:探讨如何使用Silverlight中的导航框架...

    Pro Silverlight 5 in C# (2012)

    ##### 第1章:Introducing Silverlight - **Silverlight简介**:介绍Silverlight的发展历史、特点及应用场景。 - **安装配置**:包括开发环境的搭建、所需工具的安装等。 - **第一个Silverlight应用**:通过创建一个...

    Silverlight 4 Business Application Development

    - **第1章:Silverlight 4概述**:介绍Silverlight的历史、版本迭代及最新特性。 - **第2章:搭建开发环境**:详细指导读者如何安装和配置必要的软件,包括Visual Studio 2010和Silverlight SDK等。 - **第3章:XAML...

Global site tag (gtag.js) - Google Analytics