LightSwitch-与FindControl获得一个自动完成箱,在铸件上变为null



我正在尝试在我的一个屏幕上访问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 控制以两个步骤完成:

  1. 将代码添加到屏幕Created方法(在屏幕的Created方法运行之前,不能保证控件可用)。
  2. 然后将处理程序添加到代理的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实际上是哪种类型。

最新更新