WPF中的x:是什么作用?

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:WpfApplication8.MainWindow命名空间中放置一个从Window派生的类,而
将在x命名空间中放置一个名为abc的Window类的实例。对吗?
如果我说的对,如果我没有使用x别名,那么第一种情况下的类和第二种情况下的实例都将被放在哪里?没有地方,有点像匿名类型?它们被使用,但它们所在的位置没有定义?

1
我已根据您的编辑更新了我的答案,希望能对您有所帮助。 - Rory
1
再次更新。我认为你应该看一下http://msdn.microsoft.com/en-us/library/ms747122.aspx,以了解XAML概念的介绍。 - Rory
2个回答

11

你是正确的,这是一个XML命名空间别名。如果你查看xaml文件顶部,你会发现它映射到http://schemas.microsoft.com/winfx/2006/xaml命名空间。稍后使用前缀可以使xaml解析器定位到在该命名空间中定义的类,而不必键入整个内容。这与C#中的using alias = very.long.namespace;语法很像。

通常情况下,您需要为xaml文件中打算使用的每个命名空间设置不同的别名。当使用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命名空间教程,这是xaml从中继承此功能的地方。在你的例子中,你需要停止将行视为过程性代码中的单个指令,而应该将元素作为一个整体考虑。我的意思是,因为xmlns:x出现在Window元素中,它对该元素及其包含的每个子元素都是可访问的,它所在的实际行并不重要,因为xaml不像过程性代码一样从上到下执行。


回答问题2的修改: x:Class属性 告诉编译器从 xaml 文件生成的部分类名应该是什么(如果你所说的“将放置从 Window 派生的类…”是指这个,那么你是正确的)。

第二部分你有些偏差,x:Name属性 告诉编译器在类中生成一个字段,包含对附加属性的元素的引用。这意味着,在你的例子中,你的代码后台文件将能够使用 this.abc 来引用在 xaml 标记中定义的 Window 元素。


谢谢。但我仍然没有完全理解。我已经编辑了我的原始帖子。 - devoured elysium

2

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

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

它的作用类似于缩写或using/import语句。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接