ResourceDictionary 作为 NuGet 包

Pfa*_*nna 1 c# wpf xaml nuget-package

我目前正在尝试创建一种 XAML“样式集合”,我们可以在所有 UI 项目中使用它,以实现视觉效果的一致性。

我尝试创建一个类库并添加了ResourceDictionary我的风格:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="ToggleSwitch" TargetType="{x:Type CheckBox}">
        Some style in here
    </Style>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

在构建选项中启用构建 NuGet 包并将其添加到另一个 UI 项目中。我现在不太清楚如何在 UI 项目中实际使用该样式。

这是否是一种有效的方法?谷歌搜索这个特定的意图并没有给我带来任何合理的结果。

tha*_*guy 6

这是一种有效的方法,它与在本地创建和使用资源字典没有什么不同,除了如果它们位于引用的程序集中如何引用它们。

作为程序集的应用程序资源和直接在程序集中的YourReferencedAssembly.dll资源字典的示例。YourStyleResourceDictionary.xaml

<Application.Resources>
   <ResourceDictionary>
      <!-- ...other resources. -->
      <ResourceDictionary.MergedDictionaries>
         <!-- ...other resource dictionaries. -->
         <ResourceDictionary Source="pack://application:,,,/YourReferencedAssembly;component/YourStyleResourceDictionary.xaml" />
      </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

源路径是所谓的pack URI,可以采用多种形式。您可以参考资源文件包URI文档。这是引用程序集中资源路径的详细外观:

权威:application:///

路径:编译到引用的程序集中的资源文件的名称。路径必须符合以下格式:

AssemblyShortName{;Version]{;PublicKey];component/Path

AssemblyShortName:引用的程序集的短名称。

;Version[可选]:包含资源文件的引用程序集的版本。当加载两个或多个具有相同短名称的引用程序集时,将使用此选项。

;PublicKey[可选]:用于对引用的程序集进行签名的公钥。当加载两个或多个具有相同短名称的引用程序集时,将使用此选项。

;component:指定所引用的程序集是从本地程序集引用的。

/Path:资源文件的名称,包括其路径,相对于引用程序集的项目文件夹的根目录。

与往常一样,隐式样式会自动应用于添加资源字典的范围,并且使用或引用显式样式。资源字典的来源没有区别,无论是相同的程序集还是不同的程序集。StaticResourceDynamicResource