- Windows 10 開發教程
- Windows 10 - 首頁
- Windows 10 - 簡介
- Windows 10 – UWP
- Windows 10 – 第一個應用
- Windows 10 - 應用商店
- Windows 10 - XAML 控制元件
- Windows 10 - 資料繫結
- Windows 10 - XAML 效能
- Windows 10 - 自適應設計
- Windows 10 - 自適應 UI
- Windows 10 - 自適應程式碼
- Windows 10 - 檔案管理
- Windows 10 - SQLite 資料庫
- Windows 10 – 通訊
- Windows 10 - 應用本地化
- Windows 10 - 應用生命週期
- Windows 10 - 後臺執行
- Windows 10 - 應用服務
- Windows 10 - Web 平臺
- Windows 10 - 連線體驗
- Windows 10 - 導航
- Windows 10 - 網路
- Windows 10 - 雲服務
- Windows 10 - 動態磁貼
- Windows 10 - 共享契約
- Windows 10 - 移植到 Windows
- Windows 10 有用資源
- Windows 10 - 快速指南
- Windows 10 - 有用資源
- Windows 10 - 討論
Windows 10 開發 - XAML 控制元件
XAML 代表可擴充套件應用程式標記語言 (Extensible Application Markup Language)。它是一個使用者介面框架,提供廣泛的控制元件庫,支援 Windows 的 UI 開發。其中一些控制元件具有視覺化表示,例如按鈕、文字框和文字塊等;而其他控制元件則用作其他控制元件或內容(例如影像等)的容器。所有 XAML 控制元件都繼承自“System.Windows.Controls.Control”。
XAML 新興故事
XAML 用於許多重要的 Microsoft 平臺,例如 Windows Presentation Foundation (WPF)、Silverlight,現在還包括 Windows 應用。現在,Microsoft Office 2016 也是 UWP 應用家族的一員。XAML 是一個豐富的平臺,它提供非常酷的功能和控制元件,可用於 UWP 應用程式。
下面顯示控制元件的完整繼承層次結構。
佈局控制元件
控制元件佈局對於應用程式可用性非常重要且至關重要。它用於在應用程式中排列一組 GUI 元素。選擇佈局面板時,需要考慮某些重要事項:
- 子元素的位置。
- 子元素的大小。
- 彼此重疊的子元素的分層。
下面列出了佈局控制元件:
| 序號 | 控制元件和描述 |
|---|---|
| 1 | StackPanel StackPanel 是 XAML 中一個簡單且有用的佈局面板。在 StackPanel 中,子元素可以基於 orientation 屬性沿水平或垂直方向單行排列。 |
| 2 | WrapPanel 在WrapPanel 中,子元素按順序從左到右或從上到下排列,這取決於 orientation 屬性。StackPanel 和 WrapPanel 之間的唯一區別在於,它不會將所有子元素堆疊到單行中,如果空間不足,它會將剩餘的元素換行。 |
| 3 | DockPanel DockPanel 定義一個區域,用於相對於彼此(水平或垂直)排列子元素。使用 DockPanel,您可以輕鬆地使用 Dock 屬性將子元素停靠到頂部、底部、右側、左側和中心。 使用LastChildFill 屬性,當為該元素設定時,最後一個子元素將填充剩餘空間,而不管任何其他停靠值。 |
| 4 | Canvas Canvas 是基本佈局面板,其中子元素可以使用相對於任何側邊(例如左側、右側、頂部和底部)的座標顯式定位。Canvas 通常用於二維圖形元素(例如 Ellipse、Rectangle 等),但不適用於 UI 元素,因為在 XAML 應用程式中指定絕對座標會在調整大小、本地化或縮放時帶來麻煩。 |
| 5 | Grid Grid 提供一個靈活的區域,該區域由行和列組成。在 Grid 中,子元素可以表格形式排列。可以使用Grid.Row 和Grid.Column 屬性將元素新增到任何特定行和列。 |
| 6 | SplitView SplitView 表示一個包含兩個檢視的容器;一個檢視用於主內容,另一個檢視通常用於導航命令。 |
| 7 | RelativePanel RelativePanel 定義一個區域,您可以在其中相對於彼此或父面板定位和對齊子物件。 |
| 8 | ViewBox ViewBox 定義一個內容裝飾器,可以拉伸和縮放單個子元素以填充可用空間。 |
| 9 | FlipView FlipView 表示一個專案控制元件,一次顯示一個專案,並啟用“翻轉”行為來遍歷其專案集合。 |
| 10 | GridView GridView 是一個控制元件,它以行和列的形式顯示專案的集合,並且可以水平滾動。 |
UI 控制元件
這是一個 UI 控制元件列表,終端使用者可以看到這些控制元件。
| 序號 | UI 控制元件和描述 |
|---|---|
| 1 | Button 響應使用者輸入的控制元件 |
| 2 | Calendar 表示一個控制元件,使使用者能夠透過視覺化日曆顯示選擇日期。 |
| 3 | CheckBox 使用者可以選擇或清除的控制元件。 |
| 4 | ComboBox 專案的下拉列表,使用者可以從中進行選擇。 |
| 5 | ContextMenu 獲取或設定上下文選單元素,該元素應在透過使用者介面 (UI) 從此元素內部請求上下文選單時出現。 |
| 6 | DataGrid 表示一個控制元件,該控制元件以可自定義的網格顯示資料。 |
| 7 | DatePicker 允許使用者選擇日期的控制元件。 |
| 8 | 對話方塊 應用程式還可以顯示其他視窗,以引導使用者收集或顯示重要資訊。 |
| 9 | Flyout 表示一個控制元件,該控制元件顯示輕量級 UI,這些 UI 要麼是資訊,要麼需要使用者互動。與對話方塊不同,可以透過單擊或點選 Flyout 外部、按下裝置的返回按鈕或按下“Esc”鍵來輕按關閉 Flyout。 |
| 10 | Image 顯示影像的控制元件。 |
| 11 | ListBox 顯示使用者可以從中選擇的專案內聯列表的控制元件。 |
| 12 | 選單 表示一個 Windows 選單控制元件,使您可以分層組織與命令和事件處理程式關聯的元素。 |
| 13 | MenuFlyout 表示顯示命令選單的彈出選單。 |
| 14 | PasswordBox 用於輸入密碼的控制元件。 |
| 15 | Popup 在應用程式視窗的範圍內,在現有內容之上顯示內容。 |
| 16 | ProgressBar 透過顯示條形指示進度的控制元件。 |
| 17 | ProgressRing 透過顯示環形指示不確定進度的控制元件。 |
| 18 | RadioButton 允許使用者從一組選項中選擇單個選項的控制元件。 |
| 19 | RichEditBox 允許使用者編輯富文字文件的控制元件,其內容包括格式化文字、超連結和影像。 |
| 20 | ScrollViewer 允許使用者平移和縮放其內容的容器控制元件。 |
| 21 | SearchBox 允許使用者輸入搜尋查詢的控制元件。 |
| 22 | Slider 允許使用者透過沿軌道移動 Thumb 控制元件來從一系列值中進行選擇的控制元件。 |
| 23 | TextBlock 顯示文字的控制元件。 |
| 24 | TimePicker 允許使用者設定時間值的控制元件。 |
| 25 | ToggleButton 可以在兩種狀態之間切換的按鈕。 |
| 26 | ToolTip 顯示元素資訊的彈出視窗。 |
| 27 | Window 提供最小化/最大化選項、標題欄、邊框和關閉按鈕的根視窗。 |
下面是一個示例,其中包含SplitView 中不同型別的控制元件。在 XAML 檔案中,建立了具有某些屬性和事件的不同控制元件。
<Page
x:Class = "UWPControlsDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPControlsDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Margin = "20">
<StackPanel Orientation = "Horizontal">
<ToggleButton x:Name = "HamburgerButton" FontFamily = "Segoe MDL2 Assets"
Content = "" Checked = "HandleCheck" Unchecked = "HandleUnchecked"
HorizontalAlignment = "Center"/>
<AppBarButton Icon = "Like" />
<AppBarButton Icon = "Dislike" />
<AppBarSeparator/>
<AppBarButton Icon = "Accept" />
<AppBarButton Icon = "Add" />
</StackPanel>
<SplitView x:Name = "splitView" DisplayMode = "Inline"
OpenPaneLength = "296">
<SplitView.Pane>
<StackPanel>
<TextBlock Text = "SplitView Pane" FontSize = "36"
VerticalAlignment = "Center" HorizontalAlignment = "Center"
Margin = "10"/>
<Button Content = "Options" Margin = "10">
<Button.Flyout>
<MenuFlyout>
<MenuFlyoutItem Text = "Reset"/>
<MenuFlyoutSeparator/>
<MenuFlyoutItem Text = "Repeat"/>
<MenuFlyoutItem Text = "Shuffle"/>
</MenuFlyout>
</Button.Flyout>
</Button>
</StackPanel>
</SplitView.Pane>
<StackPanel>
<TextBlock Text = "SplitView Content" FontSize = "36"
VerticalAlignment = "Center" HorizontalAlignment = "Center"
Margin = "10"/>
<Border BorderThickness = "3" BorderBrush = "Red" Margin = "5">
<StackPanel Orientation = "Horizontal">
<TextBlock Text = "Hyperlink example" Margin = "5"/>
<HyperlinkButton Content = "www.microsoft.com"
NavigateUri = "http://www.microsoft.com"/>
</StackPanel>
</Border>
<RelativePanel BorderBrush = "Red" BorderThickness = "2"
CornerRadius = "10" Padding = "12" Margin = "5">
<TextBlock x:Name = "txt" Text = "Relative Panel example"
RelativePanel.AlignLeftWithPanel = "True"
Margin = "5,0,0,0"/>
<TextBox x:Name = "textBox1" RelativePanel.RightOf = "btn"
Margin = "5,0,0,0"/>
<Button x:Name = "btn" Content = "Name"
RelativePanel.RightOf = "txt" Margin = "5,0,0,0"/>
</RelativePanel>
<FlipView Height = "400" Margin = "10" Width = "400">
<Image Source = "Images/DSC_0104.JPG"/>
<Image Source = "Images/DSC_0080.JPG"/>
<Image Source = "Images/DSC_0076.JPG"/>
<Image Source = "Images/thGTF7BWGW.jpg"/>
</FlipView>
</StackPanel>
</SplitView>
</StackPanel>
</Grid>
</Page>
下面是 C# 中的事件實現。
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPControlsDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
public MainPage() {
this.InitializeComponent();
}
private void HandleCheck(object sender, RoutedEventArgs e) {
splitView.IsPaneOpen = true;
}
private void HandleUnchecked(object sender, RoutedEventArgs e) {
splitView.IsPaneOpen = false;
}
}
}
編譯並執行上述程式碼後,您將看到以下視窗:
單擊左上角的漢堡按鈕,將開啟/關閉SplitView 面板。
在SplitView 面板中,您可以看到Flyout、MenuFlyout 和FlipView 控制元件。
在SplitView 內容中,您可以看到超連結、相對面板、ViewBox 和其他按鈕和文字框控制元件。