我正在后面的代码中更新资源(合并字典和更改 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