【问题标题】:Change default xml namespace(xmlns) to a custom one将默认 xml 命名空间(xmlns)更改为自定义命名空间
【发布时间】:2017-10-03 20:00:23
【问题描述】:

在 XAML 文件中,我们通常使用默认设置 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

如何定义自定义 xmlns 而不是默认的。如 xmlns="http://www.mypage.com"

我的意思不是添加到一个新的xmlns,而是替换默认的。

【问题讨论】:

标签: c# wpf xaml


【解决方案1】:

不清楚你的问题是什么......如果你想使用与建议不同的默认命名空间,只需在(通常)默认命名空间前加上一个名称:

<def:Window x:Class="WpfTests_2.MainWindow"
        xmlns:def="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns="clr-namespace:WpfTests_2"
        Title="MainWindow">
    <def:Window.Resources>
        <CustomBox x:Key="myLocalCustomBox"/>
    </def:Window.Resources>

    <def:Grid x:Name="grid1">
    </def:Grid>
</def:Window>

在本例中,我将项目本地命名空间 WpfTests_2 设为默认命名空间,并将(正常)默认命名空间命名为 def

对于典型的 WPF 应用程序,这是一个坏主意,因为您将使用许多控件并且每次都需要为命名空间名称添加前缀。但这当然是可能的。

如果您不使用 http://schemas.microsoft.com/winfx/2006/xaml/presentation 命名空间中的任何内容(没有 Window,没有 UserControl,没有 [whatever control]),您可以删除/替换它而不用重新定义前缀。

【讨论】:

    【解决方案2】:

    我认为这是可能的,通过下面的第二部分文档:

    For almost all of the examples given in the WPF sections of the SDK, the default XAML namespace is mapped to the WPF namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation.

    由于almost all ,也就是说很少有例子没有使用这个url,所以有可能。

    Docs Of Microsoft

    WPF 和 XAML 命名空间声明

    在许多 XAML 文件的根标记中的命名空间声明中,您会看到通常有两个 XML 命名空间声明。第一个声明将整个 WPF 客户端/框架 XAML 命名空间映射为默认名称:

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

    第二个声明映射一个单独的 XAML 命名空间,将其(通常)映射到 x: 前缀。

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

    映射到自定义类和程序集
    ...

    Another Doc:

    根元素还包含属性xmlnsxmlns:x。这些属性向 XAML 处理器指示哪些 XAML 命名空间包含标记将作为元素引用的支持类型的类型定义。

    xmlns 属性专门指示默认的 XAML 命名空间。 在默认的 XAML 命名空间中,可以不带前缀指定标记中的对象元素。 对于大多数 WPF 应用场景,以及 对于 SDK 的 WPF 部分中给出的几乎所有示例,默认 XAML 命名空间映射到 WPF 命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation

    xmlns:x 属性表示一个额外的 XAML 命名空间,它映射 XAML 语言命名空间http://schemas.microsoft.com/winfx/2006/xaml

    这种使用xmlns 来定义名称范围的使用和映射的用法与XML 1.0 规范一致。 XAML 名称范围与 XML 名称范围的不同之处仅在于,在类型解析和解析 XAML 时,XAML 名称范围还暗示了名称范围的元素如何由类型支持。

    请注意,xmlns 属性仅在每个 XAML 文件的根元素上是严格必需的。 xmlns 定义将应用于根元素的所有后代元素(此行为再次与xmlns 的 XML 1.0 规范一致。)xmlns 属性也允许在根下的其他元素上使用,并且适用于任何定义元素的后代元素。但是,频繁定义或重新定义 XAML 命名空间可能会导致难以阅读的 XAML 标记样式。

    其 XAML 处理器的 WPF 实现包括一个可识别 WPF 核心程序集的基础结构。 已知 WPF 核心程序集包含支持 WPF 映射到默认 XAML 命名空间的类型。这是通过作为项目构建文件以及 WPF 构建和项目系统的一部分的配置启用的。 因此,为了引用来自 WPF 程序集的 XAML 元素,只需将默认 XAML 命名空间声明为默认 xmlns

    【讨论】:

    • 命名空间绝对不必是默认的。元素和属性必须从 正确的 命名空间中使用,但无论您是使用默认命名空间声明还是使用前缀都无关紧要。
    • 我看到你更新了你的答案。现在真的好多了。
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2012-07-06
    • 2011-08-08
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多