在集合中查找控件 - 事件ControlAvailable已禁用

时间:2013-04-18 09:06:18

标签: c# silverlight visual-studio-lightswitch

在我的lightswitch应用程序中,我需要为每一行添加一个小图像控件,当点击它时,它应该将您发送到详细信息屏幕。我制作了silverlight控件并将其添加到lightswitch应用程序中。

    partial void VidContentItemRessources_Loaded(bool succeeded) {
  int index = 0;

  foreach (VidContentItemRessourcesItem cust in this.VidContentItemRessources) {
    this.FindControlInCollection("ImageLinkIcon", this.VidContentItemRessources.ElementAt(index))
      .ControlAvailable += (s, e) => {
        MyLinkImage = (e.Control as LinkImage);
        MyLinkImage.MouseLeftButtonDown += MyLinkImage_MouseLeftButtonDown;

      };
    index++;
  }
} 

但是,如果我这样做,我得到一个错误,可用的事件控件不能用于集合中的控件..

所以我试着这样做

        LinkImage neco = this.FindControlInCollection("ImageLinkIcon", this.VidContentItemRessources.ElementAt(index)) as LinkImage;
    neco.MouseLeftButtonDown += MyLinkImage_MouseLeftButtonDown;

但是然后neco总是为null,因为它试图在控件可用之前加载控件......任何解决方案都可以吗?

2 个答案:

答案 0 :(得分:0)

这些类型的初始化应该放在屏幕的 Created 方法中,这样就可以保证屏幕上的所有控件都已创建。如果任何屏幕的方法(如 InitializeDataWorkspace Created Saving 等)不在您的代码文件中,您可以使用它们创建它们屏幕编辑器中的 Write Code 下拉框。

答案 1 :(得分:0)

我这样解决了: 我在silverlight控件中捕获click事件比在lightsiwtch中调用方法

   public void MouseClick(object sender, MouseButtonEventArgs e) {
      var objDataContext = (IContentItem)this.DataContext;
      var Screen = (Microsoft.LightSwitch.Client.IScreenObject)objDataContext.Screen;

      Screen.Details.Dispatcher.BeginInvoke(() => {
        Screen.Details.Methods["DoImageLinkEvent"]
              .CreateInvocation(null).Execute();
      });
    }