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 应用程序。

下面显示控件的完整继承层次结构。

Inheritance Hierarchy

布局控件

控件布局对于应用程序可用性非常重要且至关重要。它用于在应用程序中排列一组 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.RowGrid.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; 
      }
		
   }
	
} 

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

Split View Content

单击左上角的汉堡按钮,将打开/关闭SplitView 面板。

Split View

SplitView 面板中,您可以看到FlyoutMenuFlyoutFlipView 控件。

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

广告
© . All rights reserved.