我们在TextBlock
或Grid
中看到了一些属性:
<TextBlock x:Name="TextBlock1" ...
为什么我们要包含这个(x)?为什么我们不说:
<TextBlock Name="TextBlock1" ...
我的意思是,我们已经在这个TextBlock的定义范围内,对吗?
必须有这样的理由。
提前致谢。
答案 0 :(得分:6)
作为Gabe答案的延伸,x:姓名是附属财产。附加属性与标准属性不同,因为它们(通常)未在使用它们的控件上定义。例如,TextBlock控件没有x:Name属性 - 相反,此属性在别处(在XAML命名空间中)定义,并且“附加”到TextBlock控件以实现它的行为。它说“我想使用可以在XAML命名空间中找到的Name附加属性。”当然,为了使事情复杂化,TextBlock控件有一个Name属性(它在Silverlight 2中不常用,因此你需要改为使用x:Name附加属性。但它们也做同样的事情。
附加属性的另一个(更容易理解)示例是Grid.Row。您可以在TextBlock控件上使用此属性来指定控件应在Grid中显示的行,即使它未在该控件上定义(Grid控件定义它)。 TextBlock只是将该属性附加到自身,该属性将自身与该行为相关联。这最初是一个令人困惑的概念,但非常强大且有用。有关附加属性的更多信息,请访问:http://msdn.microsoft.com/en-us/library/cc265152(VS.95).aspx。
希望这会有所帮助......
克里斯
答案 1 :(得分:4)
这是名称空间前缀。
示例1:
您应该在xaml页面上看到类似的内容:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
其中声明x前缀引用xaml名称空间。
示例2:
您可以通过注册命名空间并为其指定前缀来加载您自己的用户控件。
xmlns:mycontrols="clr-namespace:MyControls.Namespace;assembly=MyAssembly"
然后我们在这里使用前缀来使用此命名空间中的一个控件。
<mycontrols:MyControl />