你可以在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概念。
现在我们来遍历这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"> … </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"></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"> </p> <p><textblock x:name="ApplicationTitle"><p>Text="MY APPLICATION" </p> <p>Style="{StaticResource PhoneTextNormalStyle}"/> </p> <p><textblock x:name="PageTitle"><p>Text="page name" </p> <p>Margin="9,-7,0,0" </p> <p>Style="{StaticResource PhoneTextTitle1Style}"/> </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"> </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 中文版》的前四章主要涵盖了WPF基础、Silverlight入门、Silverlight工具以及XAML基础知识,这些都是理解Silverlight开发的重要概念。 **第一章:WPF基础** WPF,全称为Windows ...
#### 第一章:什么是Silverlight? - **定义与历史**:Silverlight是由微软公司开发的一款基于Web的技术,首次发布于2007年4月。它旨在作为Adobe Flash的一个强有力的竞争者,提供跨浏览器、跨平台的多媒体应用体验...
本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第Ⅰ部分介绍了Silverlight的基础知识、控件模型及它在绘图...
- **第1章:你好,Silverlight** - 介绍了Silverlight的基本概念,包括它的历史、特性以及为什么选择Silverlight进行开发。 - **第3章:Silverlight 4中的数据服务** - 探讨了如何在Silverlight应用程序中集成和操作...
- **第一章:Silverlight 4简介**:介绍Silverlight的基本概念和发展历程,以及Silverlight 4相比之前版本的主要改进之处。 - **第二章:环境搭建与工具介绍**:指导读者如何安装Visual Studio等开发工具,并设置...
**第一章:Silverlight 概览** - **介绍**:这一章将为读者提供 Silverlight 的背景信息,包括它的历史、功能以及与其它平台(如 Flash 和 AJAX)相比的优势。 - **安装与配置**:详细介绍如何安装 Silverlight 开发...
- **第1章:欢迎使用Silverlight 5**:介绍Silverlight 5的基本概念、功能和架构。 - **第2章:Visual Studio 2010简介**:介绍如何使用Visual Studio 2010进行Silverlight项目的创建和管理。 - **第3章:...
- 第1章:快速游览 - 第2章:解决方案资源管理器、工具箱和属性 - 第3章:选项和自定义 - 第4章:Visual Studio工作空间 - 第5章:查找和替换以及帮助系统 #### 第二部分:入门指南 (Getting Started) - 第6章:...
#### 第一章:什么是Silverlight? - **定义与历史**:Silverlight是由微软公司开发的一款基于Web的技术,首次发布于2007年4月。作为Adobe Flash的强大竞争对手,Silverlight旨在提供跨平台、跨浏览器的多媒体体验...
#### 第一章:Silverlight技术概览 在第一章中,作者介绍了Silverlight 5.0平台,并指导读者如何构建Silverlight应用程序。Silverlight是一个强大的跨浏览器、跨平台的框架,用于开发富互联网应用(RIA)。它提供了一...
本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第I部分介绍了Silverlight的基础知识、控件模型及它在绘图...
- **第1章:开始使用Silverlight**:介绍Silverlight的基本概念和技术优势。 - **第2章:XAML入门**:解释XAML的基础知识及其在Silverlight中的作用。 - **第3章:导航框架**:探讨如何使用Silverlight中的导航框架...
##### 第1章:Introducing Silverlight - **Silverlight简介**:介绍Silverlight的发展历史、特点及应用场景。 - **安装配置**:包括开发环境的搭建、所需工具的安装等。 - **第一个Silverlight应用**:通过创建一个...
- **第1章:Silverlight 4概述**:介绍Silverlight的历史、版本迭代及最新特性。 - **第2章:搭建开发环境**:详细指导读者如何安装和配置必要的软件,包括Visual Studio 2010和Silverlight SDK等。 - **第3章:XAML...