你可以在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”
分享到:
相关推荐
本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第Ⅰ部分介绍了Silverlight的基础知识、控件模型及它在绘图...
本书详细介绍了微软下一代富互联网开发技术Silverlight,分为基础篇、进阶篇、高级篇和案例篇4个部分,以Silverlight 2为主要版本从不同的层面进行了阐释:第I部分介绍了Silverlight的基础知识、控件模型及它在绘图...
第Ⅱ部分 将基础知识变为行动 第 6 章 启动示例应用程序 第 7 章 实现第一个用户情景 第 8 章 集成测试 第Ⅲ部分 TDD方案 第 9 章 Web上的 TDD 第 10 章 测试 WCF 服务 第 11 章 测试 WPF 和 ...
第一部分 核心概念 第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支持多语言 ...
第一部分 核心概念 第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页面 第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 理解和处理...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...
第1章 VB 2008核心元素 第2章 对象语法综述 第3章 面向对象编程 第4章 公共语言运行库 第5章 本地化 第6章 泛型 第7章 名称空间 第8章 异常处理和调试 第9章 用ADO.NET 3.5访问数据 第10章 在VB 2008中使用XML 第...