x:ClassModifier 指令

在同时提供了 x:Class 的情况下,修改 XAML 编译行为。 具体而言,不必创建有 Public 访问级别(默认值)的 class 分部类,提供的 x:Class 是以 NotPublic 的访问级别创建的。 此行为会影响生成的程序集中的类的访问级别。

XAML 特性用法

<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
   ...
</object>

XAML 值

NotPublic

根据您所使用的代码隐藏编程语言,所传递的用于指定 TypeAttributes.PublicTypeAttributes.NotPublic 的确切字符串会有所不同。 请参见备注。

依赖项

还必须对同一元素提供 x:Class,并且该元素必须是页中的根元素。 有关更多信息,请参见 [MS-XAML] Section 4.3.1.8

备注

.NET 框架 XAML 服务使用中 x:ClassModifier 的值中随不同的编程语言而不同。 要使用的字符串取决于每种语言如何实现其 CodeDomProvider 和其返回的用来定义 TypeAttributes.PublicTypeAttributes.NotPublic 意义的类型转换器,以及该语言是否区分大小写。

  • 对于 C#,所传递的用于指定 TypeAttributes.NotPublic 的字符串是 internal。

  • 对于 Microsoft Visual Basic .NET,为指定 TypeAttributes.NotPublic 而传递的字符串是 Friend。

  • 对于 C++/CLI,不存在支持编译 XAML 的目标文件;因此未指定要传递的值。

还可以指定 TypeAttributes.Public(C# 中为 public,Visual Basic 中为 Public);但是,指定 TypeAttributes.Public 并不常见,因为 TypeAttributes.Public 已是默认行为。

其他具有同等用户代码访问级别限制的值(例如 C# 中的 private)与 x:ClassModifier 不相关,因为 TypeAttributes.NotPublic 不支持嵌套类引用,因此, 修饰符具有同样的效果。

安全说明

x:ClassModifier 中声明的访问级别仍将取决于特定框架的解释及其功能。 如果该类是通过包 URI 引用从 WPF 资源进行引用的,当 x:ClassModifier 为 internal 时,WPF 将包括加载和实例化类型的功能。 这种情况或由其他框架实现的潜在其他类似情况的后果是,不完全依赖 x:ClassModifier 来阻止所有可能的实例化尝试。

请参见

参考

x:Class 指令

x:FieldModifier 指令

概念

WPF 中的代码隐藏和 XAML

安全性 (WPF)

其他资源

从 WPF 迁移到 System.Xaml 的类型