商务网站开发的工作任务,wapcms建站系统,wordpress 页面id,网站构建培训C# WPF编程-XAML XAML简述XAML子集XAML编译XAML基础XAML名称空间XAML中的属性和事件属性事件使用其他名称空间中的类型 加载和编译XAML XAML简述
XAML(Extensible Application Markup Language的简写#xff0c;发音zammel)是用于实例化.NET对象的标记语言。XAML… C# WPF编程-XAML XAML简述XAML子集XAML编译XAML基础XAML名称空间XAML中的属性和事件属性事件使用其他名称空间中的类型 加载和编译XAML XAML简述
XAML(Extensible Application Markup Language的简写发音zammel)是用于实例化.NET对象的标记语言。XAML可引用于诸多领域的技术但主要作用是构造WPF用户界面。WPF通过XAML设计用户界面。但XAML对于WPF不是必需的通过代码来构造WPF窗口也是可以的。
XAML子集
WPF XAML 包含描述WPF内容的元素如矢量图形控件及文档。XPS XAML是WPF XAML的一部分它为格式化的电子文档定义了一种XML表示方式。Silverlight XAML是一个用于Microsoft Silverlight应用程序的WPF XAML子集。Silverlight是一个跨平台的浏览器插件通过它可创建具有二维图形、动画、音视频的富Web内容。WF XAML包括描述WF(Work Flow,工作流)内容的元素。
XAML编译
XML的设计目标是具有逻辑性、易读且简单但没有被压缩。WPF使用BAML(Binary Application Markup Language,二进制应用程序标记语言)来克服这个缺点。BAML实际就是XAML的二进制表示。Visual Studio编译WPF应用程序时所有XAML文件都被转换为BAML这些BAML然后作为资源被嵌入到最终的DLL或EXE程序集中。编译器会在后台执行这项工作。但也可以使用未经编译的XAML这对于需要即时提供一些用于界面的情况可能是有意义的。
XAML基础
XAML标准是非常简单的
XAML文档中的每个元素都映射为.NET类的一个实例。元素的名称也完全对应于类名。与所有XML文档一样可以在一个元素中嵌套另一元素。可通过特性(attribute)设置每个类的属性(property)。
XAML文档基本框架一个空白窗口
Window x:ClassWpfHelloWorld.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006TitleMainWindow Height450 Width800Grid/Grid
/Window尽管可以使用任何顶级元素但是WPF应用程序只使用以下元素作为顶级元素
Window元素Page元素(该元素和Window元素类似但它用于可导航的应用程序)Application元素(该元素定义应用程序资源和启动设置)
XAML名称空间
只提供类名是不够的。XAML解析器还需要知道类位于哪个.NET名称空间。XAML解析器会检查应用于元素的XML名称空间。
示例文档定义的名称空间: xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns特性是XML中的一个特殊特性它专门用来声明名称空间。在创建的所有WPF XAML文档中都会使用到这两个名称空间
xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentation是WPF核心名称空间。包含了所有WPF类包括用来构建用户界面的控件。xmlns:xhttp://schemas.microsoft.com/winfx/2006/xaml是XAML名称空间。它包含各种XAML使用特性这些特性可影响文档的解释方式。该名称空间被映射为前缀x。通过在元素名称之前放置名称空间前缀x来使用该名称空间(如:x:ElementName)。
WPF包含了十几种名称空间都以System.Windows开头如System.Windows.Window类和System.Windows.Controls.Grid类。
代码隐藏类 可通过XAML构造用户界面但为了使应用程序具有一定的功能就需要用于连接包含应用程序代码的事件处理程序的方法。XAML通过使用如下所示的Class特性简化这个问题 Window x:Class“WpfHelloWorld.MainWindow” 在XAML名称空间的Class特性之前放置名称空间前缀x意味着这是XAML语言中更通用的部分。实际上Class特性高速XAML解析器用指定的名称生成一个新类。
Visual Studio会自动创建可放置事件处理代码的部分类。Visual Studio将首先提供基本的类框架:
namespace WpfHelloWorld
{/// summary/// MainWindow.xaml 的交互逻辑/// /summarypublic partial class MainWindow : Window{public MainWindow(){InitializeComponent();}}
}
InitializeComponent()方法当创建一个Window实例类是该构造函数调用InitializeComponent方法。命名元素: Grid x:Name“grid1” /Grid Name特性会告诉XAML解析器将这一字段添加到为MainWindow类自动生成的部分 private System.Windows.Controls.Grid grid1; 代码中使用grid1控件 grid1.ActualWidth获取grid1控件的实际宽度 grid1.ActualHeight获取grid1控件的实际高度
XAML中的属性和事件
属性
Grid控件在WPF中最常见的布局工具示例XAML文档结构:
简单属性
Window x:ClassWpfHelloWorld.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfHelloWorldmc:IgnorabledTitleMainWindow Height450 Width800Grid Namegrid1Grid.BackgroundLinearGradientBrush/LinearGradientBrush/Grid.BackgroundGrid.ColumnDefinitions/Grid.ColumnDefinitionsTextBox NametextQ VerticalAlignmentStretch HorizontalAlignmentStretchFontFamilyVerdana FontSize24 ForegroundGreen BackgroundAliceBlueHello World/TextBox/Grid
/Window
复杂属性
Grid Namegrid1Grid.BackgroundLinearGradientBrushLinearGradientBrush.GradientStopsGradientStop Offset0.00 ColorRed/GradientStop Offset0.50 ColorIndigo/GradientStop Offset1.0 ColorViolet//LinearGradientBrush.GradientStops/LinearGradientBrush/Grid.Background
/Grid通过代码实现渐变颜色填充背景
LinearGradientBrush brush new LinearGradientBrush();GradientStop gradientStop1 new GradientStop();
gradientStop1.Offset 0;
gradientStop1.Color Colors.Red;
brush.GradientStops.Add(gradientStop1);GradientStop gradientStop2 new GradientStop();
gradientStop2.Offset 0.5;
gradientStop2.Color Colors.Indigo;
brush.GradientStops.Add(gradientStop2);GradientStop gradientStop3 new GradientStop();
gradientStop3.Offset 1;
gradientStop3.Color Colors.Violet;
brush.GradientStops.Add(gradientStop3);grid1.Background brush;标记扩展 标记扩展允许引用另一个类中的静态属性,他们总是被{}包围起来 Button … Foreground“{x:Static SystemColors.ActiveCaptionBrush}” 附件属性 除普通属性外XAML还包括附件属性(attached property)的概念附件属性是可用于多个控件但在另一个类中定义的属性。
如这里TextBox 和Button 的 Grid.Row附件属性
TextBox ... Grid.Row0/TextBoxButton ... Grid.Row1/Button代码中也可以使用Grid.SetRow()方法。 如Grid.SetRow(txtQ, 0); 或 txtQ.SetValue(Grid.Rowproperty, 0);
特殊字符 小于号lt; 大于号gt; 符号amp; 引号quot;
事件
用于关联事件处理程序的语法为事件名“事件处理程序方法名”。 如Button的Click事件 Button … Click“btn_Click”
private void btn_Click(object sender, RoutedEventArgs e) { … }
使用其他名称空间中的类型
为使用未在WPF名称空间中定义的类需要将.NET名称控件映射到XML名称空间。 XMAL有一种特殊的语法完成这一工作该语法如下 xmlns:Prefixclr-namespace:Namespace;assemblyAssemblyName 通常在XAML文档的根元素中在紧随声明WPF和XAML名称空间的特性之后放置这个名称空间。
Prefix是希望在XAML标记中用于指示名称空间的XML前缀。如XAML语言使用的x前缀。Namespace是完全限定的.NET名称控件的名称。AssmblyName是声明类型的程序集没有.dll扩展名。 访问System名称空间中的基本类型并将其映射为前缀sys: xmlns:sys“clr-namespace:System;assemblymscorlib” 访问当前项目名称间中声明的类型并将他们映射为前缀local xmlns:local“clr-namespace:WpfHelloWorld”
加载和编译XAML
可以使用三中不同的编码方式来创建WPF应用程序
只使用代码通过代码生成用户界面。使用代码和未经编译的标记(XAML)如创建高度动态化的用户界面。这种方式在运行时使用System.Windows.Markup名称空间中的XamlReader类从XAML文件中加载部分用户界面。使用代码和编译过的标记(BMAL)对于WPF而言这是一种更好的方式也是Visual Studio支持的方式。