我正在尝试在我的一个屏幕上访问AutoCompleteBox
。我可以看到FindControl()
当我进行var testControl = FindControl("MyControl");
但是,当我试图将其投入到应该的控制类型中时,我可以操纵它,结果是null
。
这是我在做的:
System.Windows.Controls.AutoCompleteBox testBox = new System.Windows.Controls.AutoCompleteBox();
testBox = testControl as System.Windows.Controls.AutoCompleteBox;
testBox
将为null。
它肯定说控件是屏幕上的AutoCompleteBox
,我不确定我在做什么错。谁能帮忙?
编辑:感谢Yann,我能够使用以下代码解决此问题:
this.FindControl("MyControl").ControlAvailable += (p, e) =>
{
//For every use I can just cast like ((System.Windows.Controls.AutoCompleteBox)e.Control)
};
您从FindControl
获得的对象只是您发现的Just proxy 对象。到达的方法 real 控制以两个步骤完成:
- 将代码添加到屏幕的
Created
方法(在屏幕的Created
方法运行之前,不能保证控件可用)。 - 然后将处理程序添加到代理的
ControlAvailable
方法中。
Private Sub ScreensName_Created
FindControl("ControlsName"). AddressOf ControlsName_ControlAvailable
End Sub
Private Sub ControlsName_ControlAvailable(sender as Object, e as ControlAvailableEventArgs)
'do whatever you want in here
'you can cast e.Control to whatever is the type of the underlying Silverlight control.
End Sub
当然,您需要替换"屏幕名称"&带有您自己的名字的" controlsname"。
(由于某种原因,我无法成功地将两种方法的整个文本格式化为代码)
如果 as
返回null,则试图铸造为错误的类型。我的话, testControl
不是类型AutoCompleteBox
。
在第二行上放一个断点,看看运行时的testControl
实际上是哪种类型。