Exemple #1
0
        protected static bool Freeze(Freezable freezable,
                                     bool isChecking)
        {
            if (freezable.frozen)
            {
                return(true);
            }
            LocalValueEnumerator e = freezable.GetLocalValueEnumerator();

            while (e.MoveNext())
            {
                var value = e.Current.Value;
                if (value is Freezable)
                {
                    if (!(value as Freezable).FreezeCore(isChecking))
                    {
                        return(false);
                    }
                }
            }
            if (!isChecking)
            {
                freezable.frozen = true;
            }
            return(true);
        }
Exemple #2
0
        internal void cloneImpl(Freezable source, cloneDelegate cloneFreezable, bool freeze)
        {
            var e = source.GetLocalValueEnumerator();

            while (e.MoveNext())
            {
                var value = e.Current.Value;
                if (e.Current.Property.ReadOnly || value == DependencyProperty.UnsetValue || value == null)
                {
                    continue;
                }
                if (value is Freezable && !(freeze && (value as Freezable).frozen))
                {
                    value = cloneFreezable(value as Freezable);
                }
                SetValue(e.Current.Property, value);
            }
            if (freeze)
            {
                Freeze();
            }
        }
        private static bool CompareFreezables(Freezable firstFreezable, Freezable secondFreezable, int depth)
        {
            if (firstFreezable == null && secondFreezable == null)
            {
                return(true);
            }
            if (firstFreezable == null || secondFreezable == null || firstFreezable.GetType() != secondFreezable.GetType())
            {
                return(false);
            }
            IEnumerator enumerator1 = (IEnumerator)firstFreezable.GetLocalValueEnumerator();
            IEnumerator enumerator2 = (IEnumerator)secondFreezable.GetLocalValueEnumerator();

            while (enumerator1.MoveNext())
            {
                if (!enumerator2.MoveNext() || !PropertyUtilities.Compare(enumerator1.Current, enumerator2.Current, depth + 1))
                {
                    return(false);
                }
            }
            return(!enumerator2.MoveNext());
        }