Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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# Silverlight:如何动态创建页面_C#_Wpf_Silverlight - Fatal编程技术网

C# Silverlight:如何动态创建页面

C# Silverlight:如何动态创建页面,c#,wpf,silverlight,C#,Wpf,Silverlight,问题:我将要在Silverlight中打开的页面名存储在数据库中。启动应用程序时,我希望将页面设置为此字符串 与其说是这样,不如说: this.RootVisual = new MainPage(); 我想要这样的东西 string pageName = getValueFromDatabase() if (!PageExists(pageName)) throw error else this.RootVisual = SomeWizzyMethodToCreatePage(pa

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

与其说是这样,不如说:

this.RootVisual = new MainPage();
我想要这样的东西

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

我想我需要在这里使用反射来查找所有页面(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);

当你说在数据库中存储要打开的页面时,你的意思是存储要打开的页面的名称吗?是的,名称。更新了,谢谢。回答得很好,安东尼+从我这里得到1。干杯,很好用。。。只需添加我的视图Namespace.GetType(“SilverlightApplication1.Views.”+pageName);