UWP DatePicker运行时切换语言后日月年提示文本未本地化
UWP DatePicker运行时切换语言占位文本不更新问题
问题现象
基于VS2019开发的UWP应用已实现通过UI交互切换界面语言,语言切换核心实现代码:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = sLang;
设置完成后应用可自动加载对应区域资源文件,普通界面标签均可正确切换为目标语言,仅DatePicker控件存在本地化异常:
- 应用启动默认语言为英语,切换为法语后,DatePicker控件的「day | month | year」占位提示文本仍显示为英语
- 点击下拉展开选择面板后,面板内的月份名称可正确显示法语翻译
- 已尝试两种方式显式设置DatePicker控件的Language属性:在XAML中作为特性直接声明、在控件构造函数中通过代码赋值,两种方式均无效果
- 已检索相关技术讨论帖,帖中均未提供可行解决方案
问题表现参考:启动时DatePicker提示文本为英文,切换为法语后下拉面板内月份正确显示法语,仅顶部占位文本未更新。
问题根因
该问题是UWP原生DatePicker(含TimePicker)控件的已知机制限制:控件的占位提示文本是在控件首次初始化时,从应用全局语言资源缓存中读取并固化的,运行时修改PrimaryLanguageOverride不会触发控件重新读取这部分缓存资源;而下拉选择面板内的内容是面板展开时实时生成的,因此可以正确读取最新的语言配置。单独给控件设置Language属性无法触发占位文本的资源重载,因此无效。
可行解决方案
以下两种方案均经过实测可用:
- 整页重载方案(最稳定)
设置完PrimaryLanguageOverride后,主动重新导航到当前页面,临时将目标页面的NavigationCacheMode设置为Disabled保证页面完整重新初始化,所有控件重新创建时会自动读取最新的语言资源,DatePicker占位文本即可正确显示为目标语言。导航完成后可根据需求恢复页面缓存配置。 - 控件局部重建方案(无页面闪烁)
如果不想整页刷新,可以在语言切换完成后,遍历当前可视化树中所有DatePicker、TimePicker控件,记录控件所在的父容器、布局位置、绑定的属性等信息,先将控件从父容器的子元素集合中移除,再新建对应DatePicker控件还原所有配置后插回原位置,强制控件走完整初始化流程,即可加载到对应语言的占位文本。
内容的提问来源于stack exchange,提问作者David Carr
相关产品推荐
相关产品推荐

