【发布时间】:2016-01-01 02:20:03
【问题描述】:
我有我的自定义控件 MyControl,它有一个公共方法 Start()。
public partial class MyControl : UserControl
{
// This must be private.
private int _idNumber;
public MyControl()
{
InitializeComponent();
}
public void Start(int idNumber)
{
_idNumber = idNumber;
}
}
在主窗口中,我放置了一个带有 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 都必须是私有的。
【问题讨论】:
-
在MyControl的构造函数中调用Start?还是在重写的 OnInitialized 方法中?
-
@Clemens 感谢您的快速回复,但这是不可能的。我在问题的编辑版本中解释了我真正想做的事情。