我正在尝试访问其中一个屏幕上的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
AutoCompleteBox
将为空。
它肯定说屏幕上的控件是this.FindControl("MyControl").ControlAvailable += (p, e) =>
{
//For every use I can just cast like ((System.Windows.Controls.AutoCompleteBox)e.Control)
};
,我不确定我做错了什么。有人可以帮忙吗?
编辑:感谢Yann,我能够使用以下代码解决此问题:
{{1}}
答案 0 :(得分:1)
如果as
返回null,则表示您尝试转换为错误的类型。换言之,testControl
不属于AutoCompleteBox
类型。
在第二行放置一个断点,看看testControl
在运行时到底是什么类型。
答案 1 :(得分:1)
您从FindControl
获得的对象只是一个只是代理对象,正如您所发现的那样。 获取真实控件的方式分两步完成:
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
当然,您需要更换" ScreensName" &安培; " ControlsName"用你自己的名字。
(出于某种原因,我无法成功地将两种方法的整个文本格式化为代码)