什么是xmlns?当我们创建WPF项目时,它在XAML文件中扮演什么角色?
xmlns
vlf7wbxs1#
xmlns是一个XML(不一定是XAML)构造,它定义了一个命名空间,在其中解析xml元素名称。因为它是在没有限定符的情况下定义的,所以它定义了应该用来解析XML元素名称的默认名称空间。在XAML中,您通常会看到以下条目。它将默认名称空间定义为本质上的WPF,因此所有XML元素名称都被解析为WPF元素。
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
还经常会看到非默认名称空间,如下所示。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
这为XAML特定元素定义了限定的命名空间。如果你想在这个命名空间中解析一个元素或者属性名,你应该用x来限定它。例如
<StackPanel x:Name="foo" />
此定义中有两个名称解析。
62o28rlo2#
您还可以使用xmlns在XAML中获取对您自己的名称空间的引用。创建新的WPF项目时,我做的第一件事就是添加对项目名称空间的引用:
xmlns:local="clr-namespace:MyWpfProject"
现在,我可以通过使用“local:”前缀访问在项目中创建的任何类(如IValueConverters和DataTemplateSelectors)
<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />
当然,你不必使用“本地”,你可以随心所欲地命名它。您还可以以同样的方式添加对任何其他名称空间的引用。
zfycwa2u3#
您还可以通过将XmlnsDefinitionAttribute添加到程序集中,将多个CLR命名空间一起Map到一个XML命名空间。这就是WPF团队所做的,通过在System.Windows下Map大量名称空间,如下所示:
XmlnsDefinitionAttribute
[XmlnsDefinitionAttribute( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")] [XmlnsDefinitionAttribute( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Ink")]
此语法可以简化XAML,但要注意不要在合并在一起的CLR命名空间中有同名的类。
uelo1irk4#
根元素还包含属性xmlns和xmlns:x。这些属性向XAML处理器指示哪些XML命名空间包含标记将引用的元素的元素定义。xmlns属性专门指示默认的XML命名空间。这种使用xmlns定义使用和Map范围的做法与XML 1.0规范一致。希望这对你有帮助。
hgqdbh6s5#
xmlns在XAML文件中扮演什么角色?这与命名空间有关。
这也许可以通过一个类比来最好地解释:你有没有遇到过这样的情况,两个人存在于同一个团体/公司/圈子里,而且名字一样?我们公司里还有一个“本”。如果老板喊我们的名字-谁会回应?为了解决这个矛盾的问题,老板打电话给我们:分别是“Ben K”和“Ben M”也就是说,现在有一个“命名空间”。命名空间与WPF是一样的:
xmlns:k="http://koshy" xmlns:m="http://mercury"
所以现在当老板提到我们中的一个时,不会有混淆-k意味着我,而'm'意味着另一个Ben:
k
<b:GetBackToWork/> This would mean BenKoshy <m:GetBackToWork/> This would mean Ben Mercury
GetBackToWork对话框将弹出-每个对话框都在相关的名称空间中定义。Koshy将在StackOverflow中输入答案,而另一个Ben,在一些神秘的宇宙中,将与Queen一起生活在梦想中。
5条答案
按热度按时间vlf7wbxs1#
xmlns是一个XML(不一定是XAML)构造,它定义了一个命名空间,在其中解析xml元素名称。因为它是在没有限定符的情况下定义的,所以它定义了应该用来解析XML元素名称的默认名称空间。
在XAML中,您通常会看到以下条目。它将默认名称空间定义为本质上的WPF,因此所有XML元素名称都被解析为WPF元素。
还经常会看到非默认名称空间,如下所示。
这为XAML特定元素定义了限定的命名空间。如果你想在这个命名空间中解析一个元素或者属性名,你应该用x来限定它。例如
此定义中有两个名称解析。
62o28rlo2#
您还可以使用xmlns在XAML中获取对您自己的名称空间的引用。创建新的WPF项目时,我做的第一件事就是添加对项目名称空间的引用:
现在,我可以通过使用“local:”前缀访问在项目中创建的任何类(如IValueConverters和DataTemplateSelectors)
当然,你不必使用“本地”,你可以随心所欲地命名它。您还可以以同样的方式添加对任何其他名称空间的引用。
zfycwa2u3#
您还可以通过将
XmlnsDefinitionAttribute
添加到程序集中,将多个CLR命名空间一起Map到一个XML命名空间。这就是WPF团队所做的,通过在System.Windows下Map大量名称空间,如下所示:此语法可以简化XAML,但要注意不要在合并在一起的CLR命名空间中有同名的类。
uelo1irk4#
根元素还包含属性xmlns和xmlns:x。这些属性向XAML处理器指示哪些XML命名空间包含标记将引用的元素的元素定义。xmlns属性专门指示默认的XML命名空间。
这种使用xmlns定义使用和Map范围的做法与XML 1.0规范一致。
希望这对你有帮助。
hgqdbh6s5#
直观类比
xmlns
在XAML文件中扮演什么角色?这与命名空间有关。
命名空间是什么意思?
这也许可以通过一个类比来最好地解释:你有没有遇到过这样的情况,两个人存在于同一个团体/公司/圈子里,而且名字一样?
我们公司里还有一个“本”。
如果老板喊我们的名字-谁会回应?
为了解决这个矛盾的问题,老板打电话给我们:分别是“Ben K”和“Ben M”也就是说,现在有一个“命名空间”。
命名空间与WPF是一样的:
所以现在当老板提到我们中的一个时,不会有混淆-
k
意味着我,而'm'意味着另一个Ben:GetBackToWork对话框将弹出-每个对话框都在相关的名称空间中定义。Koshy将在StackOverflow中输入答案,而另一个Ben,在一些神秘的宇宙中,将与Queen一起生活在梦想中。