LightSwitch - 使用FindControl获取AutoCompleteBox,在转换时变为null

时间:2012-10-25 11:45:32

标签: c# silverlight visual-studio-lightswitch findcontrol autocompletebox

我正在尝试访问其中一个屏幕上的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}}

2 个答案:

答案 0 :(得分:1)

如果as返回null,则表示您尝试转换为错误的类型。换言之,testControl不属于AutoCompleteBox类型。

在第二行放置一个断点,看看testControl在运行时到底是什么类型。

答案 1 :(得分:1)

您从FindControl获得的对象只是一个只是代理对象,正如您所发现的那样。 获取真实控件的方式分两步完成:

  1. 将代码添加到屏幕Created方法(在屏幕的Created方法运行之前,不保证控件可用)
  2. 然后为代理的ControlAvailable方法添加处理程序。
  3. 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"用你自己的名字。

    (出于某种原因,我无法成功地将两种方法的整个文本格式化为代码)