x:FieldModifier 指令

修改 XAML 编译行为,使命名对象引用的字段由 TypeAttributes.Public 访问而非 TypeAttributes.NotPublic 默认行为来定义。

XAML 属性用法

<object x:FieldModifier="Public".../>

XAML 值

说明
Public 为指定 TypeAttributes.PublicTypeAttributes.NotPublic 而传递的具体字符串会有所不同,具体取决于使用的代码隐藏编程语言。 请参阅“备注”。

依赖项

如果一个 XAML 产品在任何地方使用 x:FieldModifier,则该 XAML 产品的根元素必须声明 x:Class 指令

注解

x:FieldModifier 与类或其成员的常规访问级别的声明无关。 仅当作为 XAML 产品一部分的特定 XAML 对象得到处理,并成为应用程序对象图中可访问的对象时,它才与 XAML 处理行为相关。 默认情况下,此类对象的字段引用保持专用,这可以防止控件使用者直接修改对象图。 控件使用者应改为通过使用编程模型启用的标准模式(例如,通过获取布局根、子元素集合、专用公共属性等)来修改对象图。

x:FieldModifier 特性的值因编程语言而异,其用途因特定框架而异。 要使用的字符串取决于每种语言如何实现其 CodeDomProvider、其返回的用于定义 TypeAttributes.PublicTypeAttributes.NotPublic 含义的类型转换器以及该语言是否区分大小写。

  • 对于 C#,被传递以指定 TypeAttributes.Public 的字符串是 public

  • 对于 Microsoft Visual Basic .NET,被传递以指定 TypeAttributes.Public 的字符串是 Public

  • 对于 C++/CLI,目前不存在 XAML 的目标;因此未定义要传递的字符串。

也可以指定 TypeAttributes.NotPublic(C# 中是 internal,Visual Basic 中是 Friend),但指定 TypeAttributes.NotPublic 是不常见的,因为已默认将 NotPublic 作为行为。

TypeAttributes.NotPublic 是默认行为,因为编译 XAML 的程序集外部的代码很少需要访问 XAML 创建的元素。 WPF 安全体系结构和 XAML 编译行为不会将存储元素实例的字段声明为公共,除非专门将 x:FieldModifier 设为允许公共访问。

x:FieldModifier 仅适合具有 x:Name 指令的元素,因为该名称成为公共后,它将用来引用字段。

默认情况下,根元素的分部类是公共的;但是,可以使用 x:ClassModifier 指令将其设置为非公共。 x:ClassModifier 指令还影响根元素类实例的访问级别。 可以将 x:Namex:FieldModifier 放在根元素上,但这只会生成根元素的一个公共字段副本,而真正的根元素类访问级别仍由 x:ClassModifier 指令控制。

另请参阅