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 布局面板。在 Stack 面板中,子元素可以根据 Orientation 属性水平或垂直排列在一行中。 |
| 2 | WrapPanel 在 WrapPanel 中,子元素根据 Orientation 属性按从左到右或从上到下的顺序排列。 StackPanel 和 WrapPanel 之间的唯一区别在于,StackPanel 不会将所有子元素堆叠到一行,而是如果剩余空间不足,会将剩余元素换行到另一行。 |
| 3 | DockPanel DockPanel 定义了一个区域,用于水平或垂直排列子元素。使用 DockPanel,您可以使用 Dock 属性轻松地将子元素停靠到顶部、底部、右侧、左侧和中间。 使用 LastChildFill 属性,最后一个子元素将填充剩余空间,无论该元素设置了其他停靠值。 |
| 4 | Canvas Canvas 是一种基本的布局面板,子元素可以在其中使用相对于任意边(例如左、右、上、下)的坐标进行显式定位。通常,Canvas 用于 2D 图形元素(例如椭圆、矩形等),但不用于 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 控件列表。
| S.No. | UI 控件及说明 |
|---|---|
| 1 | Button 响应用户输入的控件 |
| 2 | Calendar 表示允许用户通过可视化日历显示选择日期的控件。 |
| 3 | CheckBox 用户可以选择或清除的控件。 |
| 4 | ComboBox 用户可以选择的下拉列表项来自。 |
| 5 | ContextMenu 获取或设置上下文菜单元素,每当通过用户界面 (UI) 在此元素内请求上下文菜单时,该元素应显示该菜单。 |
| 6 | DataGrid 表示在可自定义网格中显示数据的控件。 |
| 7 | DatePicker 允许用户选择日期的控件。 |
| 8 | Dialogs 应用程序还可以显示其他窗口,以便用户收集或显示重要信息。 |
| 9 | Flyout 表示显示轻量级 UI 的控件,该 UI 要么是信息,要么需要用户交互。与对话框不同,弹出窗口可以通过点击或轻触其外部、按设备的返回按钮或按"Esc"键来轻量级关闭。 |
| 10 | Image 显示图片的控件。 |
| 11 | ListBox 显示用户可以选择的内联项目列表的控件。 |
| 12 | Menus 表示 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>
以下是 Events 的 C# 实现。
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
// 空白页项目模板的文档位于
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 以及其他按钮和文本框控件。

