比方說,我有一個WPF應用程序,它顯示一個帶有ArrayList的ListBox - 用任意類型的對象進行填充 - 作爲源,並且此應用程序託管在程序集「A」中。默認情況下,ListBox將顯示自定義對象的'ToString'方法的返回值。如果找到該對象類型的數據模板,那麼ListBox將使用它來進行渲染。 想象一下,另一個程序集'B'引用了'A',並試圖通過爲某些類型提供定製數據模板來擴展它,以便在該列表框中使用。如果沒有'A'知道B,有沒有辦法做到這一點?如何使用插件類構架來擴展WPF應用程序?
2
A
回答
1
是的,這是WPF的一個非常常見的用法。
在彙編B:
- 創建主題文件夾包含一個名爲Generic.xaml文件,其中包含一個空
<ResourceDictionary>
標籤 - 的
<ResourceDictionary>
標籤內,B中 添加的DataTemplates和CONTROLTEMPLATES的類型
在您的AssemblyInfo.cs文件中,添加以下行:
[assembly:ThemeInfo(ResourceDictionaryLocation.None,ResourceDictionaryLocation.SourceAsse mbly)]
現在,在您組件A:
- 創建UI瀏覽到組件B(或以其他方式選擇的.dll文件)
- 當用戶選擇的組件B至使用,使用
var assembly = Assembly.LoadFile(path)
加載它 - 使用
Activator.CreateInstance(assembly.GetType(typeName))
創造集B的對象只知道它的名字 - 這個對象添加到您的UI,或者創建使用定義的接口的其他對象(接口本身在組件A中定義)並添加到您的UI中
在程序集B中定義的模板將用於呈現程序集B中的控件和數據,即使程序集A不知道組裝B.
2
看一下Composite Application Guidance。它應該適合你。
相關問題
- 1. 可擴展處理程序/插件架構的Ruby結構
- 2. 構建插件以擴展Qt應用程序
- 3. 使用用戶插件擴展Java應用程序
- 4. 創建一個插件來擴展Qt應用程序
- 5. 爲什麼插件應用程序擴展基類?
- 6. 使用插件擴展Java Web應用程序
- 7. 使用C#插件擴展C++應用程序
- 8. WPF應用程序插件使用來自主機應用程序的資源
- 9. 構建Rails應用程序的擴展框架
- 10. 如何爲應用程序結構配置應用程序服務器擴展
- 11. 擴展Android應用程序類
- 12. 在Android中擴展類應用程序?
- 13. JavaFX不擴展應用程序類
- 14. 在Android中擴展應用程序類
- 15. 如何調整玩框架應用程序的可擴展性?
- 16. 使用應用程序擴展的Cocoapods
- 17. 使用python擴展C++應用程序
- 18. 如何模糊使用本地化擴展的C#wpf應用程序
- 19. 如何在應用程序框架2.0中使用jquery插件?
- 20. 使用MVVM模式的Wpf Prism應用程序架構
- 21. 使用Sharpdevelop Addin架構開發WPF應用程序
- 22. 如何擴展django可插拔應用程序?
- 23. 如何從構建中排除IOS 8應用程序擴展?
- 24. 我如何構建基於擴展概念的應用程序?
- 25. 如何擴展ZF2框架應用程序 - 使用外鍵的實體
- 26. 擴展web應用程序
- 27. 擴展應用程序
- 28. 擴展應用程序欄?
- 29. 擴展應用程序
- 30. Windows移動應用程序是否存在插件或擴展框架
雖然這不是我的問題的直接答案,它將是非常有用的,謝謝 – 2010-05-13 19:03:39