Windows Phone開發之路(4) XAML基礎(上)

來源:互聯網
上載者:User

  我在上一篇博文中說過,XAML是一種基於XML的用來建立和初始化.NET對象的語言。雖然XAML可以在更多的CLR類型中進行運用,但在Silverlight中它是以一種人類可創作的方式來描述UI。

一, 初識XAML:

XAML代碼:

 1 <UserControl x:Class="SilverlightApplication1.MainPage"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d=http://schemas.microsoft.com/expression/blend/2008
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 mc:Ignorable="d"
7 d:DesignHeight="300" d:DesignWidth="400">
8 <!--http://schemas.microsoft.com/winfx/2006/xaml/presentation:核心Silverlight命名空間
9 http://schemas.microsoft.com/winfx/2006/xaml:是XAML命名空間
10 -->
11
12 <Grid x:Name="LayoutRoot" Background="White">
13 <Button
14 x:Name="button"
15 Width="200"
16 Height="25"
17 Click="button_Click"
18 >
19 Click me,baby,one more time!
20 </Button>
21 </Grid>
22 </UserControl>

運行結果,:

與XAML代碼等效的C#代碼:

 1 partial class MainPage : UserControl//類MainPage從UserControl繼承
2 {
3 Button button;//聲明一個Button類對象
4
5 void InitializeComponent()
6 {
7 //初始化button
8 button = new Button();
9 button.Width=200;
10 button.Height=25;
11 button.Click+=button_Click;//添加事件
12
13 this.AddChild(button);//調用AddChild()方法將button添加到當前對象中
14 }
15 }

從以上這個簡單的執行個體中我們可以得出如下兩點認識:

  1,通常,一個XAML元素就是一個.NET類名,一個XAML屬性(Attribute)就是一個類的屬性(Property)名或者一個類的事件名,XAML被儘可能地設計成從XML到.NET的直接映射.這一點認識非常重要.

  2,我在上一篇中定義XAML的時候說過,XAML語言是基於XML語言的,所以它的表現形式與XML非常相似.

有了以上兩點認識後,下面我們開始XAML的學習了.

為了方便解釋後面的內容,我在這裡再建立一個基本的XAML例子,作為後面內容的公用執行個體:

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Grid>
<Ellipse Fill="LightBlue"/>
<TextBlock>
Name:<TextBlock Text="{Binding Name}"/>
</TextBlock>
</Grid>
</UserControl>

 

二,命名空間:

  當在XAML檔案中使用<TextBlock>元素時,Silverlight解析器會識別出來你想要建立TextBlock類的一個執行個體.然而,它無需知道使用的TextBlock類是什麼的.畢竟,即便Silverlight命名空間只包含一個單獨的名為TextBlock的類,但誰也不敢保證你不會建立一個自訂的同名的類.明確地說,你需要一種方法來指明Silverlight命名空間資訊,從而明確使用元素.這就是為什麼要定義命名空間的原因.

  在Silverlight中,通過將XML命名空間映射到Silverlight命名空間來解析類的.這一點的理解很重要.

  下面我還是拿上面的例子來講解.

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
</UserControl>

  這雷根元素<UserControl>中定義了兩個最基本的命名空間(當然還有其它命名空間後面會介紹).

  1,http://schemas.microsoft.com/winfx/2006/xaml/presentation是核心Silverlight命名空間.它包含所有的Silverlight中的類,包括Grid,StackPanel,TextBlock以及Button,通常,這個命名空間沒有使用命名空間首碼來聲明,因此它就成了整個XAML文檔的預設命名空間,也就是說,除非你特別指明,每一個元素都會被自動放入這個命名空間中.

  2,http://schemas.microsoft.com/winfx/2006/xaml是XAML命名空間.它包含多種XAML功能,可以讓你控制文檔如何被解析.這個命名空間通常會映射到x首碼.

 

  上面兩個命名空間基本上就可以讓你訪問Silverlight元素的核心庫了.不過如果你覺得不夠,你還可以自訂命名空間,下面是自訂命名空間的文法.

  文法:

  <UserControl x:Class="SilverlightApplication1.MainPage"

    xmlns:w="clr-namespace:Widgets;assembly=Widgets"

    ...

  XML命名空間聲明設定了3方面的資訊:

  1,XML命名空間首碼.注意你定義的命名空間首碼不要與其它的命名空間首碼衝突就可以了.

  2,.NET命名空間.在此例中.類被放置在Widgets命名空間中.

  3,程式集.在此例中,所使用的類是Widgets.dll程式集的一部分.假設你已經在Silverlight應用程式中添加了指向Widgets程式集的引用,它將會被自動包含進最終的XAP包裡.一旦將.NET命名空間映射到XML命名空間,你就可以在XAML文檔的任何地方使用它.例如,如果Widgets命名空間中包含名為HotButton的控制項,你可以像下面這樣建立執行個體了.

  <w:HotButton Text="Click me" Click="DoSomething"></w:HotButton>

 

三,產生類:

  有一個在根項目的x:Class屬性,在這裡再展示一遍:

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
</UserControl>

  我分以下幾點來解釋:

  1,首碼"x:"是標準XML縮寫,它表示這個特定的屬性是由命名空間中的xmlns:x屬性所指定.

  2,對於XAML編譯器來說,x:Class屬性就意味著需要產生基於XAML檔案的類定義,而x:Class屬性就是決定所產生的類名字,並且將它派生自根項目.在這裡,所產生的類名為MainPage,它的基類為UserControl.

  3,你不一定要指定一個x:Class屬性.假如我們忽略這個樣本中的屬性,那麼根對象的類型將是UserControl,而不是產生的MainPage類.不過一般會指定這個屬性.

  4,在選擇了產生一個類時,它會提供一個通過XAML描述的簡便方法來建立對象樹.由於我們所產生的每一個MainPage執行個體都將包含一系列由XAML指定的對象,因此我們只需要使用普通的物件建構文法,如:

    MainPage myMainPage=new MainPage();

  以上就是今天總結的內容,希望通過這一篇的學習能對XAML有一個初步的認識,為後面的學習打下堅實的基礎!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.