WPF 给类库设置设计时使用的资源字典
在开发多语言版本时,我将界面显示的文本保存在语言资源zh.xaml和en.xaml中,但程序启动,加载语言资源时是外部的配置文件决定的,因此语言资源我无法添加在App.xaml文件中,而开发单个 XAML 界面时,设计器将会因为找不到资源文件的存在,而拿不到资源,每次遇到语言相关的资源键值,都需要手动去复制,非常麻烦,后续代码查看也不能直接跳转到对应的Key值上。
最佳的方法是和 Blend 一样,在设计时让设计器引用上某些资源,这样设计器就能工作。实现方法是在类库里面添加特殊的文件,这个特殊的文件有文件夹和命名的要求,这是在 VisualStudio 的设计器里面写常量固定的路径。在项目的Properties文件夹里面新建 DesignTimeResources.xaml 资源字典文件,这个文件的命名规则是有约定的,不推荐自己修改。或者在csproj 上添加如下代码:
<ItemGroup>
<Page Update="Properties\DesignTimeResources.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
<ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>
</ItemGroup>`
上面代码核心就是 ContainsDesignTimeResources 这个属性。理论上可以给任意的 xaml 文件设置这个属性,但是 XAML 设计器在很多 VS 版本上只读取此路径的文件。在 DesignTimeResources.xaml 资源字典添加对其他资源字典的引用,即可实现让类库的设计器找到资源,而在运行时是不会加载资源到内存。
最后将需要使用的资源文件中添加到DesignTimeResources.xaml文件中即可,如下所示:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../zh.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
这样就可以在开发阶段,直接使用zh.xaml中的键值,也可以在xaml界面上直接跳到到该键值
标签:类库,文件,xaml,设计,WPF,资源,字典 From: https://www.cnblogs.com/webenh/p/18207287