我开始使用WPF开发桌面应用程序(.net 3.5 sp1,仅限VS,尚未混合)。
我就是这样,我在几个库中都有一些通用的可重用组件。
我在哪里可以定义我的样式&数据模板,以便它们可以在多个项目中重复使用,因此我可以拥有一致的外观和感觉?
我看过ResourceDictionaries,但我不确定
谢谢,
答案 0 :(得分:10)
ResourceDictionary是要走的路,您可以在项目之间复制包含资源字典的xaml文件,也可以将它们编译成您将从项目中引用的DLL。
要在同一个项目中引用词典,可以在App.xaml中添加类似的内容(在这种情况下,我将资源保存在ControlStyles文件夹中)。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ControlStyles/Colors.xaml"/>
<ResourceDictionary Source="ControlStyles/Window.xaml"/>
<ResourceDictionary Source="ControlStyles/Button.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
如果将它们编译成另一个dll,则可以使用此语法(如果样式dll称为StyleAssembly,则“component”一词实际上是语法的一部分,而不是目录名称):
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/>
<ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Window.xaml"/>
<ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Button.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
答案 1 :(得分:3)
@Nir是对的,我唯一喜欢做的就是替换
<ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/>
用这个简写
<ResourceDictionary Source="/StyleAssembly;component/ControlStyles/Colors.xaml"/>
它对我来说看起来更干净,运行时会在尝试查找资源时为pack:// application:,,,添加前缀。
答案 2 :(得分:0)
您需要合并的资源词典,如here所述。