将默认 xml 命名空间 (xmlns) 更改为自定义命名空间



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

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

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

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

<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、没有 [任何控件]),您可以删除/替换它而无需使用前缀重新定义它。

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

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,那就是存在很少的例子不使用这个网址,所以这是可能的。

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">

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

另一个文档:

根元素还包含属性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定义将应用于根元素的所有后代元素(此行为再次与 XML 1.0 规范一致xmlns.)xmlns属性也允许在根下的其他元素上使用,并且将应用于定义元素的任何后代元素。但是,频繁定义或重新定义 XAML 命名空间可能会导致难以阅读的 XAML 标记样式。

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

最新更新