Force UI update on the fly, after changing current culture in WPF

前端 未结 3 1071
忘了有多久
忘了有多久 2021-02-04 07:31

I need to support UI language change through the application menu. The texts are localized using resource files (similar to approach 1 here)

if I set the Thread.Cu

相关标签:
3条回答
  • 2021-02-04 07:50

    You could use the ResourceDictionary approach along with the DynamicResourceMarkupExtension. Using this approach you can swap out the resource dictionary representing the language the user has selected and the DynamicResourceMarkupExtension will ensure the new value is reflected in the UI.

    Also, if you're willing to venture into the realm of a custom solution, there is the LocalizeMarkupExtension which is provided in this WPF tutorial.

    0 讨论(0)
  • 2021-02-04 07:55

    A way that I tried and works well is this method, to call after the assignment of the property in the 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);
    }
    
    0 讨论(0)
  • 2021-02-04 08:02

    Assuming the DataContext for the menu is an object that implements INotifyPropertyChanged, you can refresh all controls by specifying null (nothing) in the PropertyChanged event...

    from msdn:

    The PropertyChanged event can indicate all properties on the object have changed by using either a null reference (Nothing in Visual Basic) or String.Empty as the property name in the PropertyChangedEventArgs.

    0 讨论(0)
提交回复
热议问题