天天看點

第一部分:基礎知識(第一章)标準的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概念。

<a href="http://blog.51cto.com/attachment/201203/192503892.gif" target="_blank"></a>

現在我們來周遊這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"&gt; …

你會發現這個檔案是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;

public partial class MainPage : PhoneApplicationPage

// Constructor

public MainPage()

在代碼中,我們可以看到,這個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"&gt;

.rowdefinitions&gt;

x:Name="TitlePanel"

Grid.Row="0"

Margin="12,17,0,28"&gt;

Text="MY APPLICATION"

Style="{StaticResource PhoneTextNormalStyle}"/&gt;

Text="page name"

Margin="9,-7,0,0"

Style="{StaticResource PhoneTextTitle1Style}"/&gt;

Grid.Row="1"

Margin="12,0,12,0"&gt;

前四個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