2009-06-10 51 views
5

我开始使用WPF(.net 3.5 sp1,仅限VS,尚未混合)开发桌面应用程序。XAML:如何定义要用于多个项目的数据模板和样式

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

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

我已经看了ResourceDictionaries,但我不确定那

  1. 他们是什么,我需要
  2. 如果他们是我需要什么,我怎么能 “进口”他们到其他项目和 在Xaml中引用它们的内容。

感谢,

回答

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,单词“组件”,实际上是语法的一部分,而不是一个目录名):

<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> 
+0

Yer only a Star,thanks :) – 2009-06-10 21:09:36

0

你想合并的资源字典,描述here

3

@Nir是正确的,我喜欢做的事,以及唯一与此速记更换

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

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

它只是看起来更清洁,运行时将前缀pack:// application:,,,当它试图找到资源。

相关问题