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; 
      }
		
   }
	
} 

编译并执行上述代码后,您将看到以下窗口 −

Split View Content

点击左上角的汉堡按钮,可以打开/关闭 SplitView 窗格。

Split View

在 SplitView 窗格中,您可以看到 Flyout、MenuFlyout 和 FlipView 控件。

在 SplitView 内容中,您可以看到超链接、相关面板、ViewBox 以及其他按钮和文本框控件。