Ejemplo n.º 1
0
        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());
                }
            }
        }