如何让 class 库中的 generic.xaml 仅与 TargetType 一起使用?

How can I have generic.xaml from class library be used with TargetType only?

我创建了一个 WPF class 库,其中包含我想在两个 WPF 应用程序中引用和使用的主题。

这是一个示例内容,取自我在 class 库中的 \Themes\generic.xaml 文件:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Style TargetType="Border">
    <Setter Property="Background">
      <Setter.Value>
        <SolidColorBrush Color="Tan"/>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>

这是我添加到 class 库中的 AssemblyInfo.cs 文件:

using System.Windows;

[assembly: ThemeInfo(
    ResourceDictionaryLocation.SourceAssembly,  //where theme specific resource dictionaries are located
                                                //(used if a resource is not found in the page,
                                                // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly   //where the generic resource dictionary is located
                                                //(used if a resource is not found in the page,
                                                // app, or any theme specific resource dictionaries)
)]

然而,我的 WPF 应用程序没有使用我在 class 库中定义的样式。

我错过了什么?尽管我的 WPF 应用程序引用了 class 库项目,但为什么我的 WPF 应用程序未使用我的 class 库中的样式?

Themes/generic.xaml 命名约定(仅)用于查找在源程序集(或特定主题程序集,具体取决于[ThemeInfo] 属性)。

它不用于将样式应用于其他控件或元素,例如 Border,它在 PresentationFramework.dll 中定义。

因此,要将 Style 应用到应用中的 Border 元素,您需要合并 App.xaml:

中的资源字典
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Themes/generic.xaml.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>