[英]Silverlight: How to create a page dynamically
问题:我将要在Silverlight中打开的页面名称存储在数据库中。 启动应用程序时,我想将页面设置为此字符串
所以而不是这样:
this.RootVisual = new MainPage();
我想要这样的东西
string pageName = getValueFromDatabase()
if (!PageExists(pageName))
throw error
else
this.RootVisual = SomeWizzyMethodToCreatePage(pageName)
我想我将需要在这里使用反射来查找所有页面(PageExists),然后以某种方式创建一个新实例(SomeWizzyMethodToCreatePage)。
假设你的意思是,你从DB AQUIRE要确定页面中显示的名称的页面的名称 。
我将以最简单的示例为例,其中所有页面都在一个应用程序程序集和一个已知的名称空间中。 可以这样简单:
Type pageType = Assembly.GetExecutingAssembly().GetType("SilverlightApplication1." + pageName);
RootVisual = (UIElement)Activator.CreateInstance(pageType);
也许更灵活的方法是在数据库中存储AssemblyQualifiedName
。 这样,页面可以位于不同的程序集和/或名称空间中,只需将其存在于XAP中(我不确定它是否可以存在于缓存的程序集zip中)。 如果页面名称是AssemblyQualifiedName
则代码变为:-
Type pageType = Type.GetType(pageName);
RootVisual = (UIElement)Activator.CreateInstance(pageType);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.