代码之家  ›  专栏  ›  技术社区  ›  Binary Worrier

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

  •  5
  • Binary Worrier  · 技术社区  · 17 年前

    我开始使用WPF开发桌面应用程序(.net 3.5sp1,仅包含vs,还没有混合)。

    我的观点是,我在几个库中有一些通用的可重用组件。

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

    我看过资源字典,但不确定

    1. 他们是我需要的
    2. 如果他们是我需要的,我怎么能 将它们“导入”到其他项目中,并且 在XAML中引用它们的内容。

    谢谢,

    3 回复  |  直到 16 年前
        1
  •  10
  •   Nir    17 年前

    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>
    
        2
  •  3
  •   Marthinus    16 年前

    @NIR是对的,我唯一喜欢做的就是替换

     <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/>
    

    用这个速记

     <ResourceDictionary Source="/StyleAssembly;component/ControlStyles/Colors.xaml"/>
    

    它在我看来更干净,当运行时试图定位资源时,它将前缀pack://application:,。

        3
  •  0
  •   Bryce Kahle    17 年前

    如前所述,需要合并资源字典 here .

    推荐文章