如何将 Application.Resources 移动到外部程序集?

How to move Application.Resources to external assembly?

假设我 App.xaml 具有以下内容:

[...]
<Application.Resources>
  <Style TargetType="{x:Type CheckBox}">
    <Setter Property="BorderBrush" Value="{StaticResource Theme.CheckBox.Border}" />
    <Setter Property="Foreground" Value="{StaticResource Theme.Foreground}" />
  </Style>
</Application.Resources>
[...]

现在,我想将这些定义移至外部程序集。这样我就可以在我的应用程序中重用 WPF 控件和 window 样式。例如,我可以创建 NuGet 包并在几秒钟内安装这些样式。

您需要进行资源组装。在这里您可以阅读如何创建它: https://msdn.microsoft.com/en-us/library/aa984332(v=vs.71).aspx

您可以创建一个简单的 classLibrary 项目,在单独的资源字典(推荐)中定义所有样式和模板等,然后将所有这些字典合并到一个字典中。

要使用来自该特定程序集的那些样式,只需在您的 App.Xaml 文件中引用它,

下面的截图应该让你有全局观

我习惯为每个style创建一个单独的ResourceDictionary(方便访问),所有这些资源字典都合并在ResourceLibrary.Xaml

现在要引用那个 ControlLibraryAssembly(在添加对它的引用之后),在你的 app.xaml 文件中添加

 <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ControlLibrary;component/ResourcesDictionaries/ResourceLibrary.xaml"/>
        </ResourceDictionary.MergedDictionaries>            
    </ResourceDictionary>        
</Application.Resources>