C# 在集合中查找控件-事件控件可用已禁用
在我的lightswitch应用程序中,我需要在每一行中添加一个小图像控件,当单击它时,它会将您发送到详细信息屏幕。我制作了silverlight控件并将其添加到lightswitch应用程序中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
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强制转换为一个数据网格。谢谢您的帮助!我用回答的方式解决了这个问题,因为我只是创建了一些方法,我在屏幕上调用这些方法:)