我有一個字符串參數的函數。參數是現有wpf Window名稱的名稱。現在我想通過字符串參數創建一個窗口實例,並且想調用該窗口的Show()函數。在運行時創建WPF窗口的對象
1
A
回答
2
這取決於您給出的名稱是窗口在其中定義的文件名還是類名。通常這些是相同的,但它們可以不同。
例如,您可能將下面的一個名爲「Elephant.xaml」文件:
<Window x:Class="Animals.Pachyderm" ...>
...
</Window>
如果這樣做,那麼窗口的文件名是「Elephant.xaml」,但類名命名空間「動物」中的「Pachyderm」。
加載窗口指定的文件名
實例化並顯示給定文件名的窗口:
var window = (Window)Application.LoadComponent(new Uri("Elephant.xaml", UriKind.Relative));
window.Show();
所以你的方法會是這個樣子:
void ShowNamedWindow(string windowFileName)
{
var window = (Window)Application.LoadComponent(new Uri(windowFileName + ".xaml", UriKind.Relative));
window.Show();
}
並被這樣調用:
ShowNamedWindow("Elephant");
加載窗口給出的類名
實例化並顯示給定的類名稱的窗口:
var window = (Window)Activator.CreateInstance(Type.GetType("Animals.Pachyderm"));
所以你的方法會是這個樣子:
void ShowNamedWindow(string className)
{
var window = (Window)Activator.CreateInstance(Type.GetType("Animals." + className));
window.Show();
}
並被這樣調用:
ShowNamedWindow("Pachyderm");
或者,您可以在ShowNamedWindow的參數中包含名稱空間(本例中爲「動物」),而不是將其附加到方法內。
加載只給出了標題欄的窗口
不建議這樣做,因爲這可能是一個非常昂貴的操作。您需要獲得Assembly,迭代Assembly中作爲Window子類的所有類型,實例化每個類型並提取其Title屬性。這實際上會構建(但不顯示)應用程序中的每種窗口之一,直到找到合適的窗口。所以我會盡可能使用文件名或類名。
0
Window newWindow = new Window() { Title = "a_string" };
newWindow.Show();
+0
它會創建一個不存在的新窗口。 如果我有一個帶「a_string」標題的窗口,並且裏面有一些其他控件。那麼我想在運行時創建它的一個對象,我們將如何做到這一點。 – 2010-07-12 13:51:01
相關問題
- 1. 在運行時創建WPF窗口
- 2. 創建對象運行時
- 3. 在運行時壓縮WPF窗口
- 4. 爲兩個WPF窗口創建抽象
- 5. 使用MVVM在運行時創建WPF對象
- 6. 在運行時創建對象
- 7. 如何在運行時創建對象?
- 8. 在運行時創建對象
- 9. OpenGL ES在運行時創建對象
- 10. 在運行時創建對象
- 11. WPF用戶控制對父窗口對象運行故事板
- 12. 創建WPF MDI窗口類
- 13. Wpf創建窗口鎖
- 14. Spring運行時對象/ bean的創建
- 15. 在運行時動態創建WPF ItemTemplate
- 16. 在WPF運行時創建tiff圖像
- 17. 需要將對象在窗口WPF
- 18. 如何在BackgroundWorker中創建WPF窗口?
- 19. 在運行時創建動態窗口 - Drools Fusion 6/Esper
- 20. 在WPF ResourceDictionary窗口中獲取窗口對象
- 21. 在運行時創建XmlRpcUrl接口
- 22. 基於執行的SqlQuery在運行時創建對象
- 23. 如何在運行時創建WPF對話框?
- 24. WPF在運行時具有不同的窗口配置
- 25. 在彈出窗口動畫運行時WPF窗口消息未觸發
- 26. 創建WPF運行時控件
- 27. Jasmine:在不存在的窗口對象上創建間諜
- 28. 創建對話框窗口
- 29. 從外部對象管理wpf窗口
- 30. 創建Tkinter GUI時出錯:'窗口'對象沒有屬性'_tk'
嗨雷,謝謝你的回答,它的工作很好,有點改變。你的代碼會給編譯時錯誤,因爲LoadComponent()將輸入變量作爲uri而不是字符串。所以你需要將它改爲LoadComponent(new Uri(「Window2.xaml」,System.UriKind.RelativeOrAbsolute)); – 2010-07-13 13:12:28
愚蠢的我......這就像第五十次我忘記了LoadComponent需要一個Uri。編譯器每次都會提醒我。我已經解決了答案。 – 2010-07-16 04:47:05