4

我见过很多,我不知道它是什么意思。我会说它与命名空间有关吗?我已经用谷歌搜索了它,但我不清楚它的目的是什么。

谁能解释它是什么以及它通常在什么情况下使用?

谢谢

编辑:

<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: 如果我错了,请纠正我:

窗口 x:Class="WpfApplication8.MainWindow"

上面的代码会将一个派生自 Window 的类放在 x:WpfApplication8.MainWindow 命名空间中,而

窗口 x:Name="abc"

将在 x 命名空间中放入一个名为 abc 的 Window 类的实例。那正确吗?

如果我是对的,如果我没有使用x别名,类(第一种情况)和实例(第二种)情况会放在哪里?无处,有点像匿名类型?它们被使用但没有定义它们的位置?

4

2 回答 2

11

你是对的,它是一个 XML 命名空间别名。如果您查看 xaml 文件的顶部,您会发现它映射到http://schemas.microsoft.com/winfx/2006/xaml命名空间。稍后使用前缀允许 xaml 解析器定位在该命名空间中定义的类,而无需键入整个内容。它与using alias = very.long.namespace;C# 中的语法没有什么不同。

您通常需要为要在 xaml 文件中使用的每个命名空间设置不同的别名。使用PRISM时的一个常见问题是映射calclr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation; 然后,您可以RegionManager通过使用访问该 CLR 命名空间中定义的类cal:RegionManager。使用 Expression Blend 时,您经常会发现它添加xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"允许它的一些设计时功能(为画板上的用户控件设置宽度和高度)。


对问题编辑的回复:您可能想查看XML 命名空间教程,这是 xaml 继承此功能的地方。在您的示例中,您需要停止将这些行视为单独的指令,就像它们在程序代码中一样,而是将元素视为一个整体。我想说的是,因为xmlns:x出现在Window元素中,所以该元素及其包含的每个子元素都可以访问它,它出现的实际行并不重要,因为 xaml 不像程序代码那样从上到下执行是.


对问题编辑 2的响应:x:Class 属性告诉编译器从 xaml 文件生成的部分类的名称应该是什么(如果这就是您所说的“将放置一个从 Window 派生的类...”的意思,那么你是对的)。

您在第二部分还差得很远,x:Name 属性告诉编译器在类中生成一个字段,其中包含对该属性所附加的元素的引用。这意味着,在您的示例中,您的代码隐藏文件将能够用于this.abc引用 xaml 标记中定义的 Window 元素。

于 2010-02-17T05:16:26.320 回答
2

这是一个命名空间定义别名。

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

它的作用很像简写或using/import语句。

通过在标签属性 ala 中定义命名空间x:Name,您可以保证在正确的空间中使用正确的属性。

您可能已经注意到,当您希望使用自定义 WPF 控件时,您必须添加自己的程序集命名空间别名。

于 2010-02-17T05:20:40.257 回答