XAML

XAML（Extensible Application Markup Language )是Windows Presentation Foundation（WPF）和Universal Windows Platform(UWP)的一部分，是微軟開發的一種基於XML、基於聲明，用於初始化結構化值和對象的使用者介面宣告式程式設計，它有著HTML的外觀，又揉合了XML語法的本質，例如：可以使用標籤設定按鈕（Button）。它類似Linux平台下的glade。至於WinFX XAML Browser Application（XBAP）是用XAML作界面描述，在瀏覽器中執行的程式，可取代過去的ActiveX、Java Applet、Flash。

XAML本質上屬於一種.NET程式語言，屬於通用語言運行庫（Common Language Runtime），同C#、VB.NET等同。與HTML類似，特點是用來描述使用者介面。XAML的語法格式為：，Application是必備的基本元素。XAML可以定義2D和3D物件、旋轉（rotations）、動畫（animations），以及各式各樣的效果。

## Hello world

- C# UWP

```XML
<Page
    x:Class="UwpAppExample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UwpAppExample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Button Margin="10,0,10,0" Height="100" Click="Hello_Click" Content="Click Me!"/>
    </Grid>

</Page>
```

```csharp
using System;
using Windows.UI.Xaml.Controls;
namespace UwpAppExample
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            await new Windows.UI.Popups.MessageDialog("Hello World!").ShowAsync();
        }
    }
}
```

- C# WPF

```XML
<Window x:Class="WpfAppExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfAppExample"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Margin="10,0,10,0" Height="100" Click="Hello_Click" Content="Click Me!"/>
    </Grid>
</Window>
```

```csharp
using System.Windows;

namespace WpfAppExample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Hello_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Hello World!");
        }
    }
}
```

- Visual Basic dotNet

```XML
<Window x:Class="WpfAppExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfAppExample"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Margin="10,0,10,0" Height="100" Click="Hello_Click" Content="Click Me!"/>
    </Grid>
</Window>
```

```VB
Imports System.Windows

Class MainWindow
    Sub New()
        InitializeComponent()
    End Sub

    Private Sub Hello_Click(sender As Object, e As RoutedEventArgs)
        MessageBox.Show("Hello World!")
    End Sub
End Class
```

## 外部連結

- Microsoft XAML overview
- XAMLdev.com A selection of categorized resources on XAML
- XAML Controls from Microsoft Longhorn Developer Introduction
- XAML used in Microsoft .NET platform
- XAMJ, open source Java based project
- United XAML Initiative - Open Source XAML Alternatives
- Shaxam - LightWave to XAML converter
- XAML and Technical Authors A discussion of the affect of the open nature of XAML.
- XAML page on NetFXGuide.com A selection of categorized resources on XAML.
- LearnWPF Website to learn WPX.
- XAML Discussion Board - A great discussion board for questions on XAML and the WPF