UWP XAML UI本地化如何避免resw文件重复录入同一字符串资源
UWP资源复用解决方案
你可以通过自定义XAML标记扩展的方式实现单个资源条目适配所有场景,无需在.resw文件中重复录入多份相同内容,具体操作如下:
步骤1:实现自定义资源标记扩展
在你的项目中新增如下ResourceExtension类,直接复用你现有的ResourceHandler逻辑拉取无后缀的资源条目:
using Windows.UI.Xaml.Markup; namespace 你的项目命名空间 { [MarkupExtensionReturnType(ReturnType = typeof(string))] public class ResourceExtension : MarkupExtension { /// <summary> /// resw文件中对应的资源键名 /// </summary> public string Key { get; set; } protected override object ProvideValue(IServiceProvider serviceProvider) { // 直接复用你现有代码中的资源获取逻辑 return ResourceHandler.Get(Key); } } }
如果你需要兼容Windows 10 1607以下版本,也可以用IValueConverter实现相同效果:将资源键作为转换器参数传入,转换器内部调用
ResourceHandler.Get返回资源值即可。
步骤2:XAML中引入命名空间并调用
在需要使用资源的XAML文件头部引入扩展类所在的命名空间:
xmlns:local="using:你的项目命名空间"
之后就可以直接给不同控件的对应属性赋值,不需要再用x:Uid,也不需要在resw中新增带属性后缀的资源:
- TextBlock赋值示例:
<TextBlock Text="{local:Resource Key=info_278}" Margin="10,0,0,0" />
- Button赋值示例:
<Button Content="{local:Resource Key=info_278}" Margin="10,0,0,0" />
原有逻辑兼容
代码中的调用方式完全不需要修改,还是保持原来的写法即可:
var displayErrorOnPopup = ResourceHandler.Get("info_278");
整个方案只需要维护.resw文件中一份info_278资源条目,即可覆盖所有使用场景,后续新增其他资源也不需要重复录入多份。
内容的提问来源于stack exchange,提问作者SurenSaluka
相关产品推荐
相关产品推荐

