.net 在WPF中更改当前区域性后,动态强制UI更新
我需要通过应用程序菜单支持UI语言更改。 使用资源文件对文本进行本地化(类似于方法1) 如果我在ctor调用.net 在WPF中更改当前区域性后,动态强制UI更新,.net,wpf,internationalization,.net,Wpf,Internationalization,我需要通过应用程序菜单支持UI语言更改。 使用资源文件对文本进行本地化(类似于方法1) 如果我在ctor调用InitializeComponent()之前设置线程.CurrentThread.CurrentUICulture,UI将按其应该的方式更改 但是,如果在应用程序正常运行期间更改了CurrentUICulture,则不会更新控件(即,无论当前区域性如何,文本保持不变) 是否有方法强制控件根据CurrentUICulture刷新?假设菜单的DataContext是一个实现INotifyPr
InitializeComponent()
之前设置线程.CurrentThread.CurrentUICulture
,UI将按其应该的方式更改
但是,如果在应用程序正常运行期间更改了CurrentUICulture
,则不会更新控件(即,无论当前区域性如何,文本保持不变)
是否有方法强制控件根据
CurrentUICulture
刷新?假设菜单的DataContext是一个实现INotifyPropertyChanged的对象,您可以通过在PropertyChanged事件中指定null(nothing)来刷新所有控件
发件人:
PropertyChanged事件可以指示
对象上的所有属性都具有
通过使用null或
参考(Visual Basic中无任何内容)或
字符串。中的属性名称为空
属性ChangedEventArgs
您可以与DynamicResourceMarkupExtension一起使用。使用这种方法,您可以调出表示用户所选语言的资源字典,而DynamicResourceMarkupExtension
将确保新值反映在UI中
此外,如果您愿意冒险进入自定义解决方案领域,还有中提供的LocalizeMarkupExtension
。我尝试过并且效果很好的一种方法是在ViewModel中指定属性后调用此方法:
private void AllowUiToUpdate()
{
var frame = new DispatcherFrame();
var dispatcherOperationCallback = new DispatcherOperationCallback(delegate
{
frame.Continue = false;
return null;
});
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, dispatcherOperationCallback, null);
Dispatcher.PushFrame(frame);
}
谢谢但是,大多数UI只是静态字符串,因此没有任何DataContext。Drew Marsh,ResourceDictionary链接不再有效。你能指出.net 4.5中的新链接吗?该链接似乎有效。页面标题是“如何:使用ResourceDictionary来管理可本地化的字符串资源”。不知道为什么会这样做。。。你能再详细说明一下吗?