wpf中控件的实例位置和访问说明符是什么?
What is the instance location and access specifier of the control in wpf?
例如新建一个wpf项目,在MainWindow.xaml文件中添加如下代码
<Grid>
<Button x:Name="buttonControl" Content="Button" Margin="332,145,0,0" Width="75"/>
<local:UserControl1/>
</Grid>
- 这里,MainWindow.xaml和MainWindow.xaml.cs(code behind)是一个对象,Button(wpf标准控件)和UserControl1(用户控件)的实例被创建为属于MainWindow对象.我理解正确吗?
- 而且控件的默认访问修饰符好像是public,我应该这样指定吗?
<Grid>
<Button x:Name="buttonControl" x:FieldModifier="Private" Content="Button" Margin="332,145,0,0" Width="75"/>
<local:UserControl1 x:FieldModifier="Private" />
</Grid>
这是基本用法吗?
您必须区分 class 访问修饰符和 XAML 元素引用访问修饰符。 XAML 定义对象的可见性由其 namescopes 定义。这意味着属于 UserControl
的控件在控件外部不直接可见或不可访问。
如果您使用 x:Name
指令为控件命名,那么编译器将在部分 class 中创建一个 internal
字段,该字段引用命名元素 (实例)。默认情况下,只能通过在 internal
范围内限定部分 class 来引用此字段。如果您希望该字段在 public
范围内可访问,您可以使用 x:FieldModifier
属性来调整该字段的可见性。这就是 x:FieldModifier
属性的用途。
您只需关心 class 修饰符而不是 UI 元素字段引用。
如果对象本身未定义 public
,则无法创建它的实例或引用它,例如,对于可见性之外的类型转换。
但是因为你想在 XAML 中允许实例化 Screen
,它 必须 包含一个 public
默认构造函数并且必须有一个public
可见度。如果你想禁止 subclassing 你可以 seal
类型:
public sealed class Screen
{
public Screen()
{}
}
如果设计用于 public
,那么定义 Screen
internal
毫无意义。这应该是显而易见的。
例如新建一个wpf项目,在MainWindow.xaml文件中添加如下代码
<Grid>
<Button x:Name="buttonControl" Content="Button" Margin="332,145,0,0" Width="75"/>
<local:UserControl1/>
</Grid>
- 这里,MainWindow.xaml和MainWindow.xaml.cs(code behind)是一个对象,Button(wpf标准控件)和UserControl1(用户控件)的实例被创建为属于MainWindow对象.我理解正确吗?
- 而且控件的默认访问修饰符好像是public,我应该这样指定吗?
<Grid>
<Button x:Name="buttonControl" x:FieldModifier="Private" Content="Button" Margin="332,145,0,0" Width="75"/>
<local:UserControl1 x:FieldModifier="Private" />
</Grid>
这是基本用法吗?
您必须区分 class 访问修饰符和 XAML 元素引用访问修饰符。 XAML 定义对象的可见性由其 namescopes 定义。这意味着属于 UserControl
的控件在控件外部不直接可见或不可访问。
如果您使用 x:Name
指令为控件命名,那么编译器将在部分 class 中创建一个 internal
字段,该字段引用命名元素 (实例)。默认情况下,只能通过在 internal
范围内限定部分 class 来引用此字段。如果您希望该字段在 public
范围内可访问,您可以使用 x:FieldModifier
属性来调整该字段的可见性。这就是 x:FieldModifier
属性的用途。
您只需关心 class 修饰符而不是 UI 元素字段引用。
如果对象本身未定义 public
,则无法创建它的实例或引用它,例如,对于可见性之外的类型转换。
但是因为你想在 XAML 中允许实例化 Screen
,它 必须 包含一个 public
默认构造函数并且必须有一个public
可见度。如果你想禁止 subclassing 你可以 seal
类型:
public sealed class Screen
{
public Screen()
{}
}
如果设计用于 public
,那么定义 Screen
internal
毫无意义。这应该是显而易见的。