x:FieldModifier 指令
修改 XAML 编译行为,使命名对象引用的字段由 TypeAttributes.Public 访问而非 TypeAttributes.NotPublic 默认行为来定义。
XAML 属性用法
<object x:FieldModifier="Public".../>
XAML 值
值 | 说明 |
---|---|
Public | 为指定 TypeAttributes.Public 和 TypeAttributes.NotPublic 而传递的具体字符串会有所不同,具体取决于使用的代码隐藏编程语言。 请参阅“备注”。 |
依赖项
如果一个 XAML 产品在任何地方使用 x:FieldModifier
,则该 XAML 产品的根元素必须声明 x:Class 指令。
注解
x:FieldModifier
与类或其成员的常规访问级别的声明无关。 仅当作为 XAML 产品一部分的特定 XAML 对象得到处理,并成为应用程序对象图中可访问的对象时,它才与 XAML 处理行为相关。 默认情况下,此类对象的字段引用保持专用,这可以防止控件使用者直接修改对象图。 控件使用者应改为通过使用编程模型启用的标准模式(例如,通过获取布局根、子元素集合、专用公共属性等)来修改对象图。
x:FieldModifier
特性的值因编程语言而异,其用途因特定框架而异。 要使用的字符串取决于每种语言如何实现其 CodeDomProvider、其返回的用于定义 TypeAttributes.Public 和 TypeAttributes.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:Name
和 x:FieldModifier
放在根元素上,但这只会生成根元素的一个公共字段副本,而真正的根元素类访问级别仍由 x:ClassModifier 指令控制。
另请参阅
- XAML 及 WPF 的自定义类
- WPF 中的代码隐藏和 XAML
- x:Name 指令
- Building a WPF Application (WPF)(生成 WPF 应用程序 (WPF))
- x:ClassModifier 指令