假设我有一个WPF应用程序,它显示一个带有ArrayList的ListBox,其中包含任意类型的对象 - 作为源,并且此应用程序托管在程序集“A”中。默认情况下,ListBox将显示自定义对象'ToString'方法的返回值。如果找到该对象类型的数据模板,则ListBox将使用它进行渲染。 想象一下,另一个组件'B'引用'A'并试图通过为某些类型提供自定义数据模板来扩展它,以便在该ListBox中使用。如果没有'A'意识到B,有没有办法做到这一点?
答案 0 :(得分:2)
看看Composite Application Guidance。它应该适合你。
答案 1 :(得分:1)
是的,这是WPF的一种常见用法。
在你的装配B中:
<ResourceDictionary>
标记<ResourceDictionary>
标记内,为B中的类型添加DataTemplates和ControlTemplates 在AssemblyInfo.cs文件中,添加以下行:
[assembly:ThemeInfo(ResourceDictionaryLocation.None,ResourceDictionaryLocation.SourceAssembly)]
现在你的装配A:
var assembly = Assembly.LoadFile(path)
加载Activator.CreateInstance(assembly.GetType(typeName))
在程序集B中创建一个只知道其名称程序集B中定义的模板将用于显示程序集B中的控件和数据,即使程序集A对程序集B一无所知。