
- WPF 教程
- WPF - 首頁
- WPF - 概述
- WPF - 環境設定
- WPF - Hello World
- WPF - XAML 概述
- WPF - 元素樹
- WPF - 依賴屬性
- WPF - 路由事件
- WPF - 控制元件
- WPF - 佈局
- WPF - 佈局巢狀
- WPF - 輸入
- WPF - 命令列
- WPF - 資料繫結
- WPF - 資源
- WPF - 模板
- WPF - 樣式
- WPF - 觸發器
- WPF - 除錯
- WPF - 自定義控制元件
- WPF - 異常處理
- WPF - 本地化
- WPF - 互動
- WPF - 2D 圖形
- WPF - 3D 圖形
- WPF - 多媒體
- WPF 有用資源
- WPF - 快速指南
- WPF - 有用資源
- WPF - 討論
WPF - XAML 概述
使用 WPF 時,您會遇到的第一件事之一就是 XAML。XAML 代表可擴充套件應用程式標記語言 (Extensible Application Markup Language)。它是一種基於 XML 的簡單宣告性語言。
在 XAML 中,建立、初始化和設定具有層次關係的物件屬性非常容易。
它主要用於設計 GUI,但也可以用於其他用途,例如宣告工作流基礎結構中的工作流。
基本語法
建立新的 WPF 專案時,預設情況下會在 MainWindow.xaml 中遇到一些 XAML 程式碼,如下所示。
<Window x:Class = "Resources.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" Title = "MainWindow" Height = "350" Width = "525"> <Grid> </Grid> </Window>
上面的 XAML 檔案包含不同型別的資訊。下表簡要解釋了每種資訊的用途。
資訊 | 描述 |
---|---|
<Window> | 它是根的起始物件元素或容器。 |
x:Class = "Resources.MainWindow" | 這是一個部分類宣告,它將標記連線到後面定義的部分類程式碼。 |
xmlns = "http://schemas.microsoft.com/win fx/2006/xaml/presentation" | 為 WPF 客戶端/框架對映預設的 XAML 名稱空間 |
xmlns:x = "http://schemas.microsoft.com/w infx/2006/xaml" | XAML 語言的 XAML 名稱空間,將其對映到 x: 字首 |
> | 根物件元素的結束標籤 |
<Grid> </Grid> |
這是空網格物件的起始和結束標籤。 |
</Window> | 關閉物件元素 |
XAML 的語法規則與 XML 幾乎相同。如果您檢視 XAML 文件,您會注意到它實際上是一個有效的 XML 檔案,但 XML 檔案不一定是 XAML 檔案。這是因為在 XML 中,屬性的值必須是字串,而在 XAML 中,它可以是不同的物件,稱為屬性元素語法。
物件元素的語法以左角括號 (<) 開始,後跟物件的名稱,例如 Button。
定義該物件元素的一些屬性。
物件元素必須用正斜槓 (/) 關閉,後緊跟右角括號 (>)。
沒有子元素的簡單物件的示例
<Button/>
具有某些屬性的物件元素的示例
<Button Content = "Click Me" Height = "30" Width = "60" />
定義屬性的另一種語法的示例(屬性元素語法)
<Button> <Button.Content>Click Me</Button.Content> <Button.Height>30</Button.Height> <Button.Width>60</Button.Width> </Button>
具有子元素的物件示例:StackPanel 包含 Textblock 作為子元素
<StackPanel Orientation = "Horizontal"> <TextBlock Text = "Hello"/> </StackPanel>
為什麼 WPF 中要使用 XAML
XAML 不僅是 WPF 最廣為人知的特性,也是最容易被誤解的特性之一。如果您接觸過 WPF,那麼您一定聽說過 XAML;但請注意以下兩個關於 XAML 的鮮為人知的事實:
- WPF 不需要 XAML
- XAML 不需要 WPF
它們實際上是可分離的技術。為了理解這一點,讓我們來看一個簡單的例子,其中在 XAML 中建立了一個帶有一些屬性的按鈕。
<Window x:Class = "WPFXAMLOverview.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" Title = "MainWindow" Height = "350" Width = "604"> <StackPanel> <Button x:Name = "button" Content = "Click Me" HorizontalAlignment = "Left" Margin = "150" VerticalAlignment = "Top" Width = "75" /> </StackPanel> </Window>
如果您選擇不在 WPF 中使用 XAML,那麼您也可以使用過程語言來實現相同的 GUI 結果。讓我們來看同一個例子,但這次,我們將用 C# 建立一個按鈕。
using System.Windows; using System.Windows.Controls; namespace WPFXAMLOverview { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // Create the StackPanel StackPanel stackPanel = new StackPanel(); this.Content = stackPanel; // Create the Button Button button = new Button(); button.Content = "Click Me"; button.HorizontalAlignment = HorizontalAlignment.Left; button.Margin = new Thickness(150); button.VerticalAlignment = VerticalAlignment.Top; button.Width = 75; stackPanel.Children.Add(button); } } }
編譯並執行 XAML 程式碼或 C# 程式碼後,您將看到如下所示的相同輸出。

從上面的例子可以看出,您在 XAML 中可以用來建立、初始化和設定物件屬性的操作,也可以使用程式碼完成。
XAML 只是一種設計 UI 元素的簡單易用的方法。
使用 XAML,並不意味著設計 UI 元素的方法是唯一的。您可以宣告 XAML 中的物件,也可以使用程式碼定義它們。
XAML 是可選的,但儘管如此,它仍然是 WPF 設計的核心。
XAML 的目標是使視覺設計師能夠直接建立使用者介面元素。
WPF 旨在使從標記控制使用者介面的所有視覺方面成為可能。