如何在复杂的WPF场景中组织资源(样式,…)?

如何组织WPF资源 – 包括样式,模板等 – 以便我可以在Windows,Pages甚至项目中使用它们。 我有哪些选项可以实现资源的最大可重用性和可维护的结构(例如每个模板一个文件)?

例如:我正在创建一个WPF应用程序,我想使用TabControl,但我想对它进行重大更改。 所以我可以创建一个样式并将其应用于TabControl和TabItem。 没关系,但是我可以在哪里放置我的资源以保持我的Window XAML清晰,并且可以从其他Windows或项目访问该样式?

我发现我可以将它添加到App.xaml,但这只是一个项目的解决方案,只允许在这个项目的项目之间共享。 另外,我认为将这些模板与其他代码分开,而不是将它们全部放在某个页面或app.xaml中会更好吗?

我通常创建一个单独的样式项目,我从项目中引用,我想要样式。 样式项目有一个固定的结构,如下所示:

造型项目

对于每个控件,我创建一个样式ResourceDictionary 。 例如我的按钮:

     

在一个主要的ResourceDictionary ,我合并了所有其他字典,在本例中是IncaDesign.xaml文件,您可以在上图中看到:

          

请注意我是如何定义自动应用的默认样式,除非您另行指定。 在每个窗口或控件中,您想要设置样式,您只需要引用这个ResourceDictionary 。 注意源的定义,它是对程序集的引用( /Commons.Styling;component...

        

现在将自动设置默认样式,如果要显式访问资源,可以使用StaticResource执行此操作。

    

在我看来,这是非常好的解决方案,适用于非常复杂的解决方案,包括模块化解决方案,例如使用PRISM构建。

ResourceDictionary适用于您所寻找的内容。

以下是如何在项目内和项目中使用它们的说明 。

您可以在解决方案中或在单独的解决方案中创建包含资源字典的项目。 您的项目将是类库类型,然后可以轻松地从任何其他项目引用.dll。 这是一篇描述这篇文章的文章: 资源词典文章