2010-06-03 73 views
3

項目A包含一個帶啓動各種報告的命令堆棧面板的WPF窗口(數據輸入窗體)。該菜單是從數據庫動態構建的列表。我試圖做的是基於與菜單選項關聯的CommandText啓動相應的WPF窗口。我想創建一個接受WPF窗口(CommandText)名稱的單個函數,並按名稱啓動窗口的一個新實例。按名稱顯示WPF窗口

我發現瞭如何在類上啓動方法的例子,但似乎無法找到一個與窗口一起工作的方法。我知道這可以通過一個開關完成,只需映射所有的窗口,但有60-70,我試圖避免膨脹。

我失敗了多次嘗試使用TypeOfActivator.CreateInstance。建議?這甚至有可能嗎?

回答

1

你可以試試這個:

string windowClass = "CreateWindow.MyWindow"; 
Type type = Assembly.GetExecutingAssembly().GetType(windowClass); 
ObjectHandle handle = Activator.CreateInstance(null, windowClass); 
MethodInfo method = type.GetMethod("Show"); 
method.Invoke(handle.Unwrap(), null); 

上面的代碼假定您的窗口被稱爲「CreateWindow.MyWindow」(與命名空間前綴),而輸入「CreateWindow.MyWindow」是在當前執行的程序集。

+0

我錯誤地認爲名稱空間和項目具有相同的名稱。改變了命名空間前綴,它工作。 – jasonk 2010-06-03 17:49:22

3

Activator適合我。你有什麼錯誤?嘗試下面的代碼將爲你工作

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Window wnd = (Window)CreateWindow("WpfApplication1.Window2"); 
    wnd.Show(); 

} 

public object CreateWindow(string fullClassName) 
{ 
    Assembly asm = this.GetType().Assembly; 

    object wnd = asm.CreateInstance(fullClassName); 
    if (wnd == null) 
    { 
     throw new TypeLoadException("Unable to create window: " + fullClassName); 
    } 
    return wnd; 
}