XAML修改仅英文生效,如何让资源DLL仅存字符串表而非BAML?
解答
1. 如何避免BAML进入资源DLL
可以通过调整WPF项目的编译和本地化配置实现:
- 确保XAML文件的Build Action设为
Page(WPF XAML的默认设置),而非Embedded Resource。默认情况下,XAML编译后的BAML会嵌入主程序集MyApp.dll,只有当你为XAML启用了特定语言的本地化标记时,才会被拆分到对应语言的资源DLL中。 - 检查项目的本地化设置:在项目属性的「UI语言」配置里,不要将XAML文件标记为需要本地化的资源。仅对字符串资源(
.resx文件)启用本地化,这样BAML会始终留在主程序集,不会被拆分到语言资源DLL。
2. 让资源DLL仅包含字符串表的方法
核心是严格分离布局与字符串资源:
- 把所有硬编码在XAML中的文本,全部提取到
.resx资源文件中,在XAML里通过{x:Static}或数据绑定引用这些字符串。 - 仅将
.resx文件设置为可本地化(在resx文件的属性面板勾选「Localizable」),并为每种目标语言创建对应的本地化资源文件(比如西班牙语的Resources.es.resx)。 - 编译时,确保只有本地化的
.resx文件被编译到语言资源DLL中,XAML编译后的BAML保留在主程序集内。
针对第三方生成资源DLL的处理建议
因为你无法自行生成资源DLL,需要向第三方明确以下要求:
- 禁止将XAML编译后的BAML包含到语言资源DLL中,所有布局相关的BAML必须保留在主程序集
MyApp.dll内。 - 资源DLL仅需包含对应语言的字符串资源(即
.resx编译后的内容),不能包含任何布局相关的BAML数据。 - 要求对方提供项目编译配置的说明,确认他们的设置符合上述规则,避免BAML被错误拆分到语言资源DLL中。
内容的提问来源于stack exchange,提问作者Juv
相关产品推荐
相关产品推荐

