WPF项目如何引用类库中内容类型资源字典的URI合并到MergedDictionaries
你之前的写法存在两个问题:一是用application协议引用类库内容文件时未指定类库程序集名,路径无法定位到类库的输出内容;二是siteoforigin协议指向的是主程序运行根目录,你加了../回退到上级目录,自然找不到输出到根目录下的i18N文件夹。按以下步骤配置即可正常引用:
前置配置确认
- 检查Localization类库中所有.xaml语言文件的属性:
- 生成操作:内容
- 复制到输出目录:如果较新则复制
- 确认主项目已添加Localization类库的项目引用,生成后主程序输出目录下会出现完整的
i18N文件夹,包含所有语言文件。
正确的URI写法
方案1:直接用相对路径(最简写法)
内容文件会同步输出到主程序根目录,直接写相对路径即可生效:
<ResourceDictionary Source="i18N/MainWindow.en-US.xaml"/>
方案2:siteoforigin协议标准写法(适配运行时动态切换语言场景)
siteoforigin固定指向主程序运行根目录,不需要额外回退路径:
<ResourceDictionary Source="pack://siteoforigin:,,,/i18N/MainWindow.en-US.xaml"/>
方案3:嵌在类库的引用写法(仅后续需要把语言文件改为嵌入类库、不对外暴露时使用)
如果把语言文件生成操作改为Page,不需要外置修改,可以用带类库标识的application URI:
<ResourceDictionary Source="pack://application:,,,/Localization;component/i18N/MainWindow.en-US.xaml"/>
其中Localization是你的类库程序集名,;component是固定标识,后面跟文件在类库项目中的相对路径。
消除ResourceKey警告
如果运行正常仅设计器报ResourceKey无法解析,你可以把上述资源字典引用添加到App.xaml的MergedDictionaries节点中做全局引用,既可避免每个页面重复配置,也能消除设计器警告。
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

