private static void RestoreDependencyPropertyOverrides(Type forType) { List <MetadataEntry> metadatas; WeakType key = new WeakType(forType); if (_typePropertyOverrides.TryGetValue(key, out metadatas)) { // Remove the reference as new overrides will be created during the following OverrideMetadata calls _typePropertyOverrides.Remove(key); // Perform DependencyProperty overrides foreach (MetadataEntry metadata in metadatas) { PropertyInfo pi = forType.GetProperty(metadata.PropertyName + "Property", BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (pi == null) { Log.Error("DependencyProperty '" + forType.FullName + "." + metadata.PropertyName + "' not found."); continue; } DependencyProperty dp = pi.GetValue(null) as DependencyProperty; if (dp == null) { Log.Error("DependencyProperty '" + forType.FullName + "." + metadata.PropertyName + "' not found."); continue; } if (dp.IsDisposed) { Log.Error("DependencyProperty '" + forType.FullName + "." + metadata.PropertyName + "' already disposed."); continue; } dp.OverrideMetadata(forType, metadata.Create()); } } }