Ejemplo n.º 1
0
        /// <summary>
        ///     If the DO is frozen, we'll return our frozen sentinel. Otherwise we'll make
        ///     an unfrozen copy.
        /// </summary>
        internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
        {
            Debug.Assert(owner != null && property != null,
                         "It is the caller responsibility to ensure that owner and property are non-null.");

            Freezable result         = _defaultValuePrototype;
            Freezable ownerFreezable = owner as Freezable;

            // If the owner is frozen, just return the frozen prototype.
            if (ownerFreezable != null && ownerFreezable.IsFrozen)
            {
                return(result);
            }

            result = _defaultValuePrototype.Clone();

            // Wire up a FreezableDefaultPromoter to observe the default value we
            // just created and automatically promote it to local if it is modified.
            FreezableDefaultPromoter promoter = new FreezableDefaultPromoter(owner, property);

            promoter.SetFreezableDefaultValue(result);
            result.Changed += promoter.OnDefaultValueChanged;

            return(result);
        }
        /// <summary>
        ///     If the DO is frozen, we'll return our frozen sentinel. Otherwise we'll make
        ///     an unfrozen copy.
        /// </summary>
        internal override object CreateDefaultValue(DependencyObject owner, DependencyProperty property)
        {
            Debug.Assert(owner != null && property != null,
                "It is the caller responsibility to ensure that owner and property are non-null.");
            
            Freezable result = _defaultValuePrototype;
            Freezable ownerFreezable = owner as Freezable;
            
            // If the owner is frozen, just return the frozen prototype.
            if (ownerFreezable != null && ownerFreezable.IsFrozen)
            {
                return result;
            }
            
            result = _defaultValuePrototype.Clone();

            // Wire up a FreezableDefaultPromoter to observe the default value we
            // just created and automatically promote it to local if it is modified.
            FreezableDefaultPromoter promoter = new FreezableDefaultPromoter(owner, property);
            promoter.SetFreezableDefaultValue(result);
            result.Changed += promoter.OnDefaultValueChanged;
                        
            return result;
        }