我试图在我的一个屏幕上访问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
,我不确定自己做错了什么。有人可以帮忙吗?编辑:感谢Yann,我能够使用以下代码解决此问题:
this.FindControl("MyControl").ControlAvailable += (p, e) =>
{
//For every use I can just cast like ((System.Windows.Controls.AutoCompleteBox)e.Control)
};
最佳答案
正如您所发现的,从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”。
(由于某种原因,我无法成功地将两个方法的整个文本格式化为代码)
关于c# - LightSwitch-使用FindControl获取AutoCompleteBox,在转换时为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13067864/