27
|
svick Raja Nadar · 技术社区 · 16 年前 |
![]() |
1
29
x:name只是更明确地表达“这个特定XML名称空间中的name属性”的方式。WPF不能在没有给出这个提示的情况下编译它,因为它在同一个程序集中,这只是它们如何编写解析器的一个限制。 如果你问为什么是这样,我不确定,因为我没有写。它可能与它有关,需要能够在构建UserControl1(换句话说,catch-22)之前将name属性(read:dependency属性)解析为具体的属性。 |
![]() |
2
9
开始时,为了创建.NET对象的树,编写了XAML编译器,微软内部有101个项目使用了XAML。 XAML编译器对WPF一无所知。 __name_157;属性由WPF定义,XAML编译器不知道该属性。WPF将name属性映射为与XAML编译器支持的__name标记_157;相同。__x:name_中的__表示使用__name_157;由XAML XML模式定义,__name_157;表示在给定对象上查找名为__name_157;的属性。参见 In WPF, what are the differences between the x:Name and Name attributes? 了解更多详细信息。 XAML编译器在不必加载定义用户控件的程序集的情况下,对用户控件的处理能力非常有限。由于在加载程序集之前需要编译XAML,因此XAML编译器显然可以为在同一程序集中实现的控件加载程序集。因此,XAML编译器甚至不知道该项是用户控件。
XAML编译器可能会说__name未定义为属性_;如果定义为属性_,请考虑有多少人无法使简单的自定义控件正常工作!因此,XAML编译器有一种特殊的情况,通过猜测代码的含义,给出了一条更有用的错误消息。它的猜测基本上是正确的。 除了最简单的用户控件之外,任何东西都需要在它自己的程序集中,但是用户简单控件是如此常见,以至于一个特殊的情况对它们来说是值得的。 |