Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在集合中查找控件-事件控件可用已禁用_C#_Silverlight_Visual Studio Lightswitch - Fatal编程技术网

C# 在集合中查找控件-事件控件可用已禁用

C# 在集合中查找控件-事件控件可用已禁用,c#,silverlight,visual-studio-lightswitch,C#,Silverlight,Visual Studio Lightswitch,在我的lightswitch应用程序中,我需要在每一行中添加一个小图像控件,当单击它时,它会将您发送到详细信息屏幕。我制作了silverlight控件并将其添加到lightswitch应用程序中 partial void VidContentItemRessources_Loaded(bool succeeded) { int index = 0; foreach (VidContentItemRessourcesItem cust in this.VidContentItem

在我的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总是空的,因为它试图在控件可用之前加载它。。。任何解决方案请?

这些类型的初始化应在屏幕的创建方法中进行,这样可以确保屏幕上的所有控件都已创建。如果屏幕的任何方法(如InitializeDataWorkspace、Created、Save等)不在您的代码文件中,您可以使用屏幕编辑器中的“编写代码”下拉框来创建它们。

我是这样解决的: 我在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();
      });
    } 

听起来好像调用VidContentItemResources_加载的方法太早了。至少在调用InitializeComponent()之后,尝试将代码附加到鼠标事件处理程序;此初始化为组件();在silverlight控件内,我无法从silverlight lightswitch实体进行管理,我必须在lightswitch内进行,其中没有InitializeComponent();嗨,亚恩,光开关之王!!你是我伟大的老师!!我现在用dispatcher timer解决了这个非常糟糕的问题,但我还有另一个问题:-/i不能重新键入this.FindControlInCollection(“MyControl”,this.Collection.ElementAt(index));任何可以处理mouseDown事件的类型。。。目前看来,我无法从集合中的控件生成myControl类型??我的第二个想法是直接从silverlight控件解决这个问题。。。我可以访问项目Unid,但我真的不知道如何从lightswitch打开新屏幕-这应该是我点击图标并打开其项目详细信息屏幕thx fort anything的最终结果!!无法直接从FindControl提供的代理访问Silverlight控件。您必须使用代理添加ControlAvailable处理程序。在处理程序中,您可以通过“e”参数(使用e.control)访问控件。这可以强制转换到底层Silverlight控件。因此,如果它是一个数据网格,您应该将e.Control强制转换为一个数据网格。谢谢您的帮助!我用回答的方式解决了这个问题,因为我只是创建了一些方法,我在屏幕上调用这些方法:)