[英]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.