我需要通过应用程序菜单支持UI语言更改。 文本使用资源文件进行本地化(类似于方法1 here)
如果我在ctor调用Thread.CurrentThread.CurrentUICulture
之前设置InitializeComponent()
,则UI会按原样更改。
但是,如果在应用程序的正常运行期间更改了CurrentUICulture
,则不会更新控件(即文本保持不变,无论当前文化如何)。
有没有办法根据CurrentUICulture
强制控件刷新?
答案 0 :(得分:10)
您可以将the ResourceDictionary
approach与DynamicResourceMarkupExtension
一起使用。使用此方法,您可以换出表示用户所选语言的资源字典,DynamicResourceMarkupExtension
将确保新值反映在UI中。
此外,如果您愿意冒险进入自定义解决方案领域,this WPF tutorial中会提供LocalizeMarkupExtension
。
答案 1 :(得分:2)
假设菜单的DataContext是一个实现INotifyPropertyChanged的对象,您可以通过在PropertyChanged事件中指定null(nothing)来刷新所有控件...
来自msdn:
PropertyChanged事件可以指示 对象上的所有属性都有 通过使用null来改变 引用(在Visual Basic中没有任何内容)或 String.Empty作为属性名称 PropertyChangedEventArgs。
答案 2 :(得分:-1)
我尝试并运行良好的方法是在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);
}