XAML

什么是XAML命名空间?XAML命名空间实际上是XML命名空间概念的扩展。指定XAML命名空间的技术依赖于XML命名空间语法,使用URI作为命名空间标识符的约定,使用前缀提供从同一标记源引用多个命名空间的方法,等等.XML命名空间被添加到XAML定义主要概念是,XAML命名空间游戏所有既。标记用法英语谚语英语谚语的唯一性范围。,影响也。标记实体可能由特定CLR空间命名引用状语从句:程序的集请立...
摘要由CSDN通过智能技术生成

什么是XAML命名空间?

XAML命名空间实际上是XML命名空间概念的扩展。指定XAML命名空间的技术依赖于XML命名空间语法,使用URI作为命名空间标识符的约定,使用前缀提供从同一标记源引用多个命名空间的方法,等等.XML命名空间被添加到XAML定义主要概念是,XAML命名空间游戏所有既。标记用法英语谚语英语谚语的唯一性范围,影响也。标记实体可能由特定CLR空间命名引用状语从句:程序的集请立即获取的iTunes的方式。后一种考虑也受到XAML模式上下文概念的影响。但是出于WPF如何使用XAML命名空间的目的,您通常可以根据默认的XAML命名空间(XAML语言命名空间)来考虑XAML命名空间,

WPF XAML和命名空间声明

在许多XAML文件的根标记中的名称空间声明中,您将看到通常有两个XML名称空间声明。第一个声明将整个WPF客户端/框架XAML命名空间映射为默认名称:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

第二个声明映射一个单独的XAML命名空间,将其(通常)到映射  x:前缀。

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

声明这些的之间关系的英文   前缀映射请| |立即iTunes中的电子杂志XAML作为语言定义一部分的内在函数,而WPF是一种使用XAML作为语言并为XAML定义其对象的词汇表的实现因为WPF词汇表的用法比XAML内在函数用法更常见,所以WPF词汇表被映射为默认词汇表。 x:

x: 映射XAML语言内在函数支持的前缀约定后面是项目模板,示例代码以及此SDK中语言功能的文档.XAML命名空间定义了许多常用功能,即使对于基本WPF应用程序也是如此。例如,为了通过部分类将任何后台代码连接到XAML文件,将该必须类命名为  x:Class  相关XAML文件的根元素中的属性。或者,希望您作为键控资源访问的XAML页面中定义的任何元素都应该 

 

映射到自定义类和程序集

您可以使用xmlns 前缀声明中的一系列标记将XML名称空间映射到程序集,类似于标准WPF和XAML-intrinsics XAML名称空间映射到前缀的方式。一系列前缀声明标记将XML名称空间映射到程序集,类似于标准WPF和XAML的内在(XAML-内联函数)XAML名称空间映射到前缀的方式。

语法采用以下可能的命名标记和以下值:

clr-namespace: 在程序集中声明的CLR名称空间,其中包含要公开为元素的公共类型。

assembly= 包含部分或全部引用的CLR命名空间的程序集。此值通常只是程序集的名称,而不是路径,并且不包括扩展名(例如的.dll文件或压缩的.exe)。必须在包含您要映射的XAML的项目文件中将该程序集的路径建立为项目引用。为了合并版本控制和强名称签名,该  assembly 值可以的英文的AssemblyName定义的字符串,而不是简单的字符串名称。

请注意,将clr-namespace 标记与其值分隔的字符的英文冒号(:),而将assembly 标记与其值分隔的字符的英文等号(=)。这两个令牌之间使用的字符是分号。此外,请勿在声明中的任何位置包含任何空格。

例子:后台代码如下

namespace SDKSample {  
    public class ExampleClass : ContentControl {  
        public ExampleClass() {  
        ...  
        }  
    }  
} 

则在XAML文件中应该这么定义

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

映射到当前程序集

assembly :如果clr-namespace 引用的英文在与引用自定义类的应用程序代码相同的程序集中定义的,则可以省略   或者,此情况的等效语法是指定。  assembly=,在等号后面没有字符串标记。

如果在同一程序集中定义,则自定义类不能用作页面的根元素部分类不需要映射。如果您打算将它们作为XAML中的元素引用,则只需要映射不是应用程序中页面的部分类的类。

将CLR命名空间映射到程序集中的XML命名空间

WPF定义了XAML处理器使用的CLR属性,以便将多个CLR命名空间映射到单个XAML命名空间。此属性XmlnsDefinitionAttribute被放置在生成程序集的源代码中的程序集级别WPF程序集源代码使用此属性将各种常见名称空间(如System.Windows程序状语从句:System.Windows.Controls)映射到http://schemas.microsoft.com/winfx/2006/xaml/presentation名称空间

XmlnsDefinitionAttribute需要两个参数:XML / XAML命名空间名称和CLR命名空间的名称。不止一个XmlnsDefinitionAttribute可以存在多个CLR命名空间映射到相同的XML命名空间。一旦映射,如果需要,通过using在部分类代码隐藏页面中提供适当的语句,可以也。在没有完全限定的情况下引用这些命名空间的成员。有关更多详细信息,请参阅XmlnsDefinitionAttribute

XAML模板的名称空间和其他前缀

如果您正在使用WPF XAML的开发环境和/或设计工具,您可能会注意到XAML标记中还有其他已定义的XAML命名空间/前缀。

Visual Studio的WPF Designer使用通常映射到前缀的设计器命名空间d: .WPF的最新项目模板可能预先映射此XAML命名空间,以支持在Visual Studio的WPF Designer和其他设计环境之间交换XAML。此设计XAML命名空间用于在设计器中往返基于XAML的UI时保持设计状态。它还用于诸如d:IsDataSource在设计器中启用运行时数据源的功能。

您可能会看到映射的另一个前缀是mc:mc:用于标记兼容性,并且正在利用不一定特定于XAML的标记兼容性模式。在某种程度上,标记兼容性柯林斯功能用于在框架之间或跨支持实现的其他边界交换XAML,在XAML模式上下文之间工作,为设计器中的有限模式提供兼容性等。有关标记兼容性概念及其与WPF的关系的更多信息,请参阅  标记兼容性( mc :)语言功能

WPF和装配加载

WPF XAML的模式上下文与WPF应用程序模型集成,后者又使用CLR定义的AppDomain的概念。以下序列描述了XAML架构上下文如何根据WPF对AppDomain中的使用和其他因素来解释如何在运行时或设计时加载程序集或查找类型。

  1. 迭代AppDomain,从最近加载的程序集开始,查找已经加载的程序集,该程序集匹配名称的所有方面。

  2. 如果名称是限定的,则在限定名称上调用Assembly.Load(String)

  3. 如果限定名称的短名称+公钥标记与从中加载标记的程序集匹配,则返回该程序集。

  4. 使用短名称+公章标记来调用Assembly.Load(String)

  5. 如果名称不合格,请调用Assembly.LoadWithPartialName

松散的XAML不使用第3步; 没有加载程序集。

编译的WPF XAML(通过XamlBuildTask生成)不使用AppDomain中已加载的程序集(步骤1)。此外,名称永远不应该从XamlBuildTask输出中取消资格,因此步骤5不适用。

编译的BAML(通过PresentationBuildTask生成)使用所有步骤,但BAML也不应包含不合格的程序集名称。

 

加载的XAML应用程序中的名称范围

在更广泛的编程或计算机科学上下文中,编程概念通常包括可用于访问对象的唯一标识符或名称的原理。对于使用标识符或名称的系统,名称范围定义了如果请求该名称的对象,或者强制执行标识名称唯一性的边界,进程或技术将在其中搜索的边界。这些一般原则适用于XAML名称范围。在WPF中,在加载页面时,在XAML页面的根元素上创建XAML名称范围。从页面根开始的XAML页面中指定的每个名称都将添加到相关的XAML名称范围。

在WPF XAML中,作为公共根元素(例如窗口)的元素始终控制XAML名称范围。如果诸如FrameworkElement的FrameworkContentElement上之类的元素是标记中页面的根元素,则XAML处理器会隐式添加  根,以便页面可以提供有效的XAML名称范围。

 注意:

即使没有在XAML中标记的任何元素上定义属性Namex:Name属性,WPF构建操作也会为XAML生成创建XAML名称范围。

如果您尝试在任何XAML名称范围内使用相同的名称两次,则会引发异常。对于具有代码隐藏并且是已编译应用程序一部分的WPF XAML,在初始标记编译期间为页面创建生成的类时,WPF构建操作会在构建时引发异常。对于未通过任何构建操作进行标记编译的XAML,可能会在加载XAML时引发与XAML名称范围问题相关的异常.XAML设计人员也可能在设计时预见到XAML名称范围问题。

将对象添加到运行时对象树

WPAM XAML名称范围的时刻。如果在解析生成该树的XAML之后的某个时间点向对象树添加对象,则新对象上的值Namex:Name值不会自动更新XAML范围中的信息。要在加载XAML后将对象的名称添加到WPF XAML名称范围中,必须在定义XAML名称范围的对象上调用RegisterName的相应实现,该对象通常是XAML页根。如果未注册名称,则无法通过FindName等方法按名称引用添加的对象,并且不能将该名称用于动画定位。

应用程序开发人员最常见的情况是,您将使用RegisterName将名称

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值