XAML:如何定义数据模板&要在多个项目中使用的样式

时间:2009-06-10 20:31:22

标签: wpf xaml resources

我开始使用WPF开发桌面应用程序(.net 3.5 sp1,仅限VS,尚未混合)。

我就是这样,我在几个库中都有一些通用的可重用组件。

我在哪里可以定义我的样式&数据模板,以便它们可以在多个项目中重复使用,因此我可以拥有一致的外观和感觉?

我看过ResourceDictionaries,但我不确定

  1. 他们是我需要的东西
  2. 如果他们是我需要的,我怎么能 '将'导入'到其他项目中 在Xaml中引用它们的内容。
  3. 谢谢,

3 个答案:

答案 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所述。