private static void FrameworkElement_Initialized(object sender, EventArgs e) { FrameworkElement frameworkElement = (FrameworkElement)sender; frameworkElement.Initialized -= new EventHandler(FreezeBehavior.FrameworkElement_Initialized); ResourceDictionary resources = frameworkElement.Resources; if (resources != null) { FreezeBehavior.FreezeResources(resources); } }
public static void FreezeResources(ResourceDictionary resources) { object[] objArray = new object[resources.Keys.Count]; resources.Keys.CopyTo(objArray, 0); object[] objArray1 = objArray; for (int i = 0; i < (int)objArray1.Length; i++) { Freezable item = resources[objArray1[i]] as Freezable; if (item != null && item.CanFreeze) { item.Freeze(); } } foreach (ResourceDictionary mergedDictionary in resources.MergedDictionaries) { FreezeBehavior.FreezeResources(mergedDictionary); } }
private static void FreezeBehavior_FreezeResourcesPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) { if (!(bool)e.NewValue) { return; } ResourceDictionary resources = null; FrameworkElement frameworkElement = target as FrameworkElement; FrameworkContentElement frameworkContentElement = target as FrameworkContentElement; if (frameworkElement != null) { if (frameworkElement.IsInitialized) { resources = frameworkElement.Resources; } else { frameworkElement.Initialized += new EventHandler(FreezeBehavior.FrameworkElement_Initialized); } } else if (frameworkContentElement != null) { if (frameworkContentElement.IsInitialized) { resources = frameworkContentElement.Resources; } else { frameworkContentElement.Initialized += new EventHandler(FreezeBehavior.FrameworkContentElement_Initialized); } } if (resources != null) { FreezeBehavior.FreezeResources(resources); } }