Обновление ResourceDictionary с помощью Resources.BeginInit () - PullRequest
0 голосов
/ 29 января 2019

Я обновляю ресурсы (объединяя словари и меняя значения ResourceKey) в коде позади.Я где-то читал, что я должен записать все изменения ResourceDictionary между этими строками Resources.BeginInit() и Resources.EndInit() таким образом, чтобы DynamicResources не применялись до тех пор, пока не будут выполнены все изменения.

Может кто-нибудь дать больше разъяснений о том, что происходит, когда ресурсдобавлены / удалены из объединенных словарей, когда обновляется ключ ресурса?

Пример:

    private void _replaceResourceDictionary(ResourceDictionary newResource, ResourceDictionary oldResource)
    {
         double newDefaultFontSize = 15.0;

        //This info may be incorrect: Using Begin & End ensures that DynamicResources are not refresh multiple times
        Application.Current.Resources.BeginInit();
        _removeFromMergedDictionaries(oldResource);
        _addToMergedDictionaries(newResource);
        Application.Current.Resources.EndInit();

       //Question: Does using Begin & End will benefit here as well?
        Application.Current.Resources.BeginInit();
        Application.Current.Resources["FontSize_Small"] = newDefaultFontSize - 2;
        Application.Current.Resources["FontSize_Default"] = newDefaultFontSize;
        Application.Current.Resources["FontSize_DefaultPlus"] = newDefaultFontSize + 2;
        Application.Current.Resources["FontSize_HeaderNormal"] = newDefaultFontSize + 4;
        Application.Current.Resources["FontSize_HeaderLarge"] = newDefaultFontSize + 6;
        Application.Current.Resources["FontSize_MenuItem"] = newDefaultFontSize + 12;
        Application.Current.Resources.EndInit();
    }

Спасибо,

RDV

...