看了很多,不知道是什么意思。我会说它与 namespace 有关吗?我已经用谷歌搜索过了,但我不清楚它的用途是什么。
谁能解释一下它是什么以及通常在哪些情况下使用?
谢谢
编辑:
<Window x:Class="WpfApplication8.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
但例如,在上面的代码中,我在第三行将 x
定义为 XAML 命名空间的别名,尽管我使用的是相同的 x
在第一行代码中。这是怎么发生的?它不关心事物出现的顺序?
编辑2: 如果我错了请纠正我:
Window x:Class="WpfApplication8.MainWindow"
上面的代码会将一个派生自Window的类放在x:WpfApplication8.MainWindow命名空间中,而
Window x:Name="abc"
将在 x 命名空间中放置一个名为 abc 的 Window 类的实例。是吗?
如果我是对的,如果我没有使用 x
别名,类(第一种情况)和实例(第二种)情况会被放入哪里?无处可去,有点像匿名类型?它们被使用但是它们所在的地方没有被定义?
最佳答案
你是对的,它是一个 XML 命名空间别名。如果查看 xaml 文件的顶部,您会发现它映射到 http://schemas.microsoft.com/winfx/2006/xaml
命名空间。稍后使用前缀允许 xaml 解析器定位在该命名空间中定义的类,而无需键入整个内容。这与 C# 中的 using alias = very.long.namespace;
语法没有什么不同。
您通常需要为要在 xaml 文件中使用的每个 namespace 设置不同的别名。使用 PRISM 时常见的一个正在将 cal
映射到 clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation
;然后,您可以使用 cal:RegionManager
访问在该 CLR 命名空间中定义的 RegionManager
类。使用 Expression Blend 时,您经常会发现它添加了 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
和 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
允许它的一些设计时功能(为画板上的用户控件设置宽度和高度)。
对问题编辑的回应:您可能想看一下 XML Namespace tutorial ,这是 xaml 从中继承此功能的地方。在您的示例中,您需要停止将行视为单独的指令,因为它们将在过程代码中,而是将元素视为一个整体。我想说的是,因为 xmlns:x
出现在 Window
元素中,所以该元素及其包含的每个子元素都可以访问它,它的实际行出现在什么地方并不重要,因为 xaml 不像过程代码那样从上到下执行。
对问题编辑 2 的回应: x:Class attribute告诉编译器从 xaml 文件生成的部分类的名称应该是什么(如果这就是您所说的“将放置一个从 Window 派生的类...”的意思,那么您是正确的)。
您在第二部分中走得太远了,x:Name attribute告诉编译器在类中生成一个字段,其中包含对该属性所附加的元素的引用。这意味着,在您的示例中,您的代码隐藏文件将能够使用 this.abc
来引用 xaml 标记中定义的 Window 元素。
关于c# - x : thing in WPF serve for? 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2278424/