WPF XAML合并默认名称空间定义

在WPF应用程序中,您可以创建XmlnsDefinitions以将另一个程序集中的多个名称空间映射到一个引用中。

您可以利用它将您自己的名称空间映射到Microsoft默认的XmlnsDefinition,例如:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "MyLibrary.MyControls")]

这样,您甚至不需要在XAML文件中添加对命名空间的引用,因为它们已映射到默认的“xmlns”。

所以,如果我有一个名为“MyControl”的控件,我可以像这样使用它(没有任何名称空间或前缀):

<MyControl />

我的问题是 :我可以将默认的Microsoft命名空间合并为一个?

例如:我想通过将其合并到“xmlns”中来摆脱“xmlns:x”命名空间。 我必须将“http://schemas.microsoft.com/winfx/2006/xaml”中的所有名称空间引用到“http://schemas.microsoft.com/winfx/2006/xaml/presentation”。

喜欢这个:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System...")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System...")]
...

所以我可以把它变成:

<Window x:Class="MyProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    >

进入这个:

<Window Class="MyProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    >

您不能覆盖现有的名称空间映射,因为它们已经存在于标准集合中,但您可以尝试将所有.NET名称空间合并到您自己的XML名称空间中。 喜欢这个:

[assembly: XmlnsDefinition("urn:foobar", "System.Windows.Controls")]
[assembly: XmlnsDefinition("urn:foobar", "System.Windows.Documents")]
[assembly: XmlnsDefinition("urn:foobar", "System.Windows.Shapes")]
// ...
[assembly: XmlnsDefinition("urn:foobar", "FoobarLibrary.Controls")]
// ...

它可能工作(我没有尝试过)。 你的XAML将如下所示:

<Window x:Class="FoobarProject.MainWindow"
    xmlns="urn:foobar"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

请注意,您无法摆脱x命名空间:

  • 它没有映射到.NET命名空间,它是纯XML命名空间和XAML语言的一部分。

  • 这样做会导致冲突( x:NameName )。

  • 说到冲突,像这样合并命名空间是在寻求麻烦。 您可能会遇到这些命名空间旨在解决的名称冲突。

    链接地址: http://www.djcxy.com/p/5899.html

    上一篇: WPF XAML merge default namespace definitions

    下一篇: App.xaml can not found namespace IocContainter MVVM