Silverlight:如何动态创建页面

问题:我将要在Silverlight中打开的页面名称存储在数据库中。 当我启动应用程序时,我想将页面设置为此字符串

所以不是这样的:

this.RootVisual = new MainPage(); 

我想要这样的东西

 string pageName = getValueFromDatabase() if (!PageExists(pageName)) throw error else this.RootVisual = SomeWizzyMethodToCreatePage(pageName) 

我想我需要在这里使用reflection来查找所有页面(PageExists),然后以某种方式创建一个新实例(SomeWizzyMethodToCreatePage)。

假设您的意思是从数据库中获取您想要确定要显示的页面名称的页面的名称。

我将采用最简单的示例,其中所有页面都在单个应用程序集和单个已知命名空间中。 它可以这么简单: –

 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);