XAML介绍
1.定义
为构建应用程序用户界面而创建的一种新的“可扩展应用程序标记语言”,提供一种便于扩展和定位的语法来定义和程序业务逻辑分离的用户界面。
XAML 是一种 XML(Extensible Markup Language)的扩展,XAML 是 WPF 中用于定义用户界面的标记语言,它提供了一种声明性的方式来描述应用程序的外观和行为。通过使用 XAML,开发人员可以更好地组织和维护代码,并实现灵活且可交互的用户界面。
示例:
<Window x:Class="YourNamespace.YourWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="450" Width="800">
<Grid>
<!-- 在此处使用命名空间中的类型和资源 -->
<local:CustomControl />
<Button Content="Click Me" Click="Button_Click" />
<TextBlock Text="{Binding Path=MyProperty}" />
<sys:String>Hello, World!</sys:String>
</Grid>
</Window>
2.语言规范
XAML 是基于 XML 的语言,遵循或扩展 XML 结构规则。
对象元素语法是 XAML 标记语法,通过声明 XML 元素来实例化 CLR 类或结构。 此语法类似于其他标记语言(如 HTML)的元素语法。 对象元素语法以左尖括号 (<) 开头,后面紧跟进行实例化的类或结构的类型名称。 零个或多个空格可以跟在类型名称后面,零个或多个属性也可以在对象元素上声明,使用一个或多个空格分隔每个属性名称=“值”对。 最后,必须满足以下条件之一:
- 元素和标记必须以正斜杠 (/) 结尾,后面紧跟右尖括号 (>)。
- 开始标记必须以右尖括号 (>) 结尾。
具体定义就一下两种形式:<xxx />
和<ABC ></ABC>
例如,以下示例是对象元素语法
<Button Content="Click Me" Click="Button_Click" />
<TextBlock Text="{Binding Path=MyProperty}" ></TextBlock>
其他更详细的规范参考官网:
XAML 概述 - WPF .NET
XAML 语法描述 - WPF .NET
3.命名空间
xaml与C#一样,也有命名空间的概念,命名空间(Namespace)用于引用和使用特定类型和资源。通过引入适当的命名空间,可以在 XAML 中使用所需的类、结构、属性和其他定义。
xaml命名空间定义
框架自带命名空间的语法:
有一些wpf或者框架自带的命名空间,形式上看想网址,如:http://schemas.microsoft.com/winfx/2006/xaml/presentation
,使用的时候按如下格式:
xmlns[:前缀名]=“命名空间描述”;
命名空间描述就是那个网址的内容,这种网址形式的命名空间是一种约定,旨在确保命名空间的唯一性,并提供一种简单的方式来引用和区分不同的命名空间。当您在 XAML 中定义命名空间时,您可以使用任何有效的网址形式的字符串作为命名空间标识符,只要它们在您的项目中是唯一的。
因此,尽管这些命名空间的网址形式看起来像是 URL 地址,但它们并不会与实际的网络资源相连,也不会在网络上进行访问。它们只是用作标识符,以确保命名空间的唯一性和可区分性。
自定义命名空间或程序集映射语法 :
xmlns[:必选前缀]="clr-namespace:[命名空间];assembly=[程序集名称]"
如果使用时不带前缀,就来自于默认的命名空间,其他的命名空间使用则必须带前缀。
常见的 XAML 命名空间
在 WPF 中,常见的 XAML 命名空间包括:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
:这是默认的命名空间,定义了用于创建 WPF 用户界面的基本元素,例如窗口、控件、布局等。xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
:这个命名空间定义了 XAML 的一些常用特性和属性,例如 XAML 命名空间的别名(x:)以及资源的引用和定义。xmlns:local="clr-namespace:YourNamespace"
:这个命名空间用于引用当前项目中的自定义类型和资源。local
是命名空间的前缀,YourNamespace
是包含自定义类型和资源的命名空间。xmlns:sys="clr-namespace:System;assembly=mscorlib"
:这个命名空间用于引用 .NET Framework 中的系统类型和类。sys
是命名空间的前缀,System;assembly=mscorlib
指定了mscorlib
程序集中的System
命名空间。
除了上述命名空间之外,还可以引用其他自定义命名空间、第三方库的命名空间或特定的 WPF 扩展命名空间,具体取决于您的项目需求。
<Window x:Class="YourNamespace.YourWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="450" Width="800">
<Grid>
<!-- 在此处使用命名空间中的类型和资源 -->
<local:CustomControl />
<Button Content="Click Me" Click="Button_Click" />
<TextBlock Text="{Binding Path=MyProperty}" />
<sys:String>Hello, World!</sys:String>
</Grid>
</Window>
扩展
将自定义命名空间定义成:http://***
作用:
在项目往往会有很多类和控件在不同命名空间中,如果全部使用命名空间直接引用,就需要很多,这种方式可以将多个命名空间转换成同一个
在framework项目中
找到Properties下面的AssemblyInfo.cs文件
在里面添加命名空间的映射转换
[assembly:XmlnsDefinition("http://www.wpfcustomlibrary.com/controls", "WpfCustomControlLibrary1")]
然后在使用的项目中添加该命名空间,就可以使用了
xmlns:control="http://www.wpfcustomlibrary.com/controls"
如果有多个命名空间:
可以将其映射到同一个命名空间描述
使用时就可以使用同一个命名空间
在Net Standard项目中
添加和使用方法是一样的,不过AssemblyInfo.cs文件位置不一样,如何添加WPF相关的类库,直接在目录下面,如果普通类库可能没有这个文件,需要自己添加。