你可以在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)
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"> …
你会发现这个文件是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)
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"
mc:Ignorable="d"
d:DesignWidth="480"
d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait"
Orientation="Portrait" shell:SystemTray.IsVisible="True">
x:Name="TitlePanel"
Grid.Row="0"
Margin="12,17,0,28">
Text="MY APPLICATION"
Style="{StaticResource PhoneTextNormalStyle}"/>
Text="page name"
Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
Grid.Row="1"
Margin="12,0,12,0">
前四个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”
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/803118