动态添加用户控件来一个Silverlight 4页

我建立类似的“仪表板”我们与Silverlight 4的应用程序中的iGoogle。

每个用户信息中心(其snapins和它们的位置)将被存储在数据库中。 每个单元的是一个用户控件,例如... AwesomeSnapin.xaml。

在Silverlight中的仪表板页面,我检索了用户信息中心是管理单元的对象,其中包括在管理单元的信息的集合。 我可以存储在网页或类或任何所需的名称。

我有下面的代码通过snapins收集哪些循环将它们添加到仪表板页面。 在测试中,我刚才硬编码一个单一的管理单元项目。 这里是原型代码:

foreach (var UserSnapin in op.Entities) { UserControl uc = new AmsiSL.eFinancials.BudgetCheck(); Canvas.SetLeft(uc, UserSnapin.PositionLeft); Canvas.SetTop(uc, UserSnapin.PositionTop); Layout.Children.Add(uc); MessageBox.Show(String.Format("Added {0}",UserSnapin.Snapin.Name)); }

上述工作正常...但当然增加了BudgetCheck管理单元为被定义为用户仪表板的每个项目。 当然,消息框是仅用于调试的目的。

我怎么会改变的是3号线加载基于集合中的数据的用户控件类(使用类名或XAML路径取好)。

--------------解决方案-------------

我会承担的那一刻起UserSnapin.Snapin.Name在这种情况下是“BudgetCheck”,并且所有Snapins被发现在AmsiSL.eFinancials命名空间。 我还假设你的用户控件的compilied在同一个应用程序集。 您可以使用此代码: -

foreach (var UserSnapin in op.Entities)
{
Type snapInType = Assembly.GetExecutingAssembly()
.GetType("AmsiSL.eFinancials." + UserSnapin.Snapin.Name);

UIElement snapIn = (UIElement)Activator.CreateInstance(snapInType );

Canvas.SetLeft(snapIn , UserSnapin.PositionLeft);
Canvas.SetTop(snapIn , UserSnapin.PositionTop);

Layout.Children.Add(snapIn);
}

中频snapins是一个库,而不是你也许可以使用Type.GetType(string)静态方法来解决的价值snapInType但你需要知道组件名字。

分类:Silverlight的 时间:2012-12-09 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.010 (s). 9 q(s)