- 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 和其他按钮和文本框控件。