我有我的自定义控件 MyControl,它有一个公共方法 Start()。
public partial class MyControl : UserControl
{
// This must be private.
private int _idNumber;
public MyControl()
{
InitializeComponent();
}
public void Start(int idNumber)
{
_idNumber = idNumber;
}
}
在 MainWindow 中,我放置了一个带有 x:Name="myControl" 的 MyControl。
<Window x:Class="MyNameSpace.MainWindow"
xmlns:local="clr-namespace:MyNameSpace">
<Grid>
<local:MyControl x:Name="myControl"/>
</Grid>
</Window>
在 MainWindow 的 Start 方法中,我使用 x:Name 调用 MyControl 的 Start 方法。
public partial class MainWindow : Window
{
// This must be private
private int _myContolId;
public MainWindow()
{
InitializeComponent();
}
public void Start()
{
// ID must be set here.
_myControlId = 1;
myControl.Start(_myControlId);
}
}
如果不使用 x:Name,我怎么能做同样的事情?
请注意,MyControl 的 Loaded 事件在我的情况下是无效的,因为 MyControl 的 Start() 方法必须在它作为可视元素加载之前被调用。
在 MyControl 的构造函数中或初始化时调用 Start 也是无效的,因为 int 参数 idNumber 必须在 MainWindow 的 Start 方法中设置。
更重要的是,对于 setter 和 getter,MyControl 的 _idNumber 和 MainWindow 的 _myContolId 都必须是私有的。