예제 #1
0
        public void ClearValue(DependencyProperty dp)
        {
            if (IsSealed)
                throw new InvalidOperationException("Cannot manipulate property values on a sealed Dependency Object");

            _properties[dp] = null;
        }
 public DependencyPropertyChangedEventArgs(DependencyProperty property, object oldValue, object newValue)
     : this()
 {
     Property = property;
     OldValue = oldValue;
     NewValue = newValue;
 }
 private DependencyPropertyDescriptor(PropertyDescriptor property, Type componentType, DependencyProperty dependencyProperty)
     : base(dependencyProperty.Name, null)
 {
     _property = property;
     _componentType = componentType;
     _dependencyProperty = dependencyProperty;
     _metadata = dependencyProperty.GetMetadata(componentType);
 }
예제 #4
0
        public void CoerceValue(DependencyProperty dp)
        {
            if (dp == null)
                throw new ArgumentNullException("dp");

            PropertyMetadata pm = dp.GetMetadata(this);
            if (pm.CoerceValueCallback != null)
                pm.CoerceValueCallback(this, GetValue(dp));
        }
        internal static DependencyPropertyDescriptor FromProperty(DependencyProperty dependencyProperty)
        {
            if (dependencyProperty == null)
                throw new ArgumentNullException("dependencyProperty");

            #region find PropertyDescriptor

            PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(dependencyProperty.OwnerType);
            /*foreach (PropertyDescriptor pd in pdc)
            {
                if (pd.Name == dependencyProperty.Name)
                {
                    property = pd;
                    break;
                }
            }*/
            var property = pdc.Cast<PropertyDescriptor>().FirstOrDefault(pd => pd.Name == dependencyProperty.Name);

            #endregion

            DependencyPropertyDescriptor dpd = null;
            if (property != null)
            {
                if (!CachedDpd.TryGetValue(property, out dpd))
                {
                    dpd = new DependencyPropertyDescriptor(property, dependencyProperty.OwnerType, dependencyProperty);
                    CachedDpd.TryAdd(property, dpd);
                }
            }

            return dpd;
        }
예제 #6
0
 public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback)
 {
     ValidateRegisterParameters(name, propertyType, ownerType);
     var dp = new DependencyProperty(true, name, propertyType, ownerType, defaultMetadata, validateValueCallback);
     DependencyObject.Register(ownerType, dp);
     return dp;
 }
예제 #7
0
        public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback)
        {
            ValidateRegisterParameters(name, propertyType, ownerType);
            var dp = new DependencyProperty(false, name, propertyType, ownerType, typeMetadata, validateValueCallback);
            DependencyObject.Register(ownerType, dp);

            // is this needed?
            //dp.OverrideMetadata(ownerType, typeMetadata);

            return dp;
        }
예제 #8
0
 internal DependencyPropertyKey(DependencyProperty dependencyProperty)
 {
     _dependencyProperty = dependencyProperty;
 }
예제 #9
0
 protected virtual void OnApply(DependencyProperty dp, Type targetType)
 {
 }
예제 #10
0
 protected virtual bool ShouldSerializeProperty(DependencyProperty dp)
 {
     throw new NotImplementedException("DependencyObject - ShouldSerializeProperty(DependencyProperty dp)");
 }
예제 #11
0
        public void SetValue(DependencyProperty dp, object value)
        {
            if (IsSealed)
                throw new InvalidOperationException("Cannot manipulate property values on a sealed Dependency Object");

//            if (dp.ReadOnly)
//                throw new InvalidOperationException("Cannot manipulate read-only Dependency Property");

            if (dp == null)
                throw new ArgumentNullException("dp");

            if (!dp.IsValidType(value))
                throw new ArgumentException("Value not of the correct type for this Dependency Property");

            ValidateValueCallback validate = dp.ValidateValueCallback;
            if (validate != null && !validate(value))
                throw new ArgumentException("Value does not validate");

            object oldValue = null;
            if(_properties.ContainsKey(dp))
                oldValue = _properties[dp];

            if (!Equals(oldValue, value))
            {
                _properties[dp] = value;
                var property = DependencyPropertyDescriptor.FromProperty(dp);
                if (property != null)
                    property.OnValueChanged(this);

                OnPropertyChanged(new DependencyPropertyChangedEventArgs(dp, oldValue, value));
            }
        }
예제 #12
0
 public object ReadLocalValue(DependencyProperty dp)
 {
     object val = _properties[dp];
     return val == null ? DependencyProperty.UnsetValue : val;
 }
예제 #13
0
 public void InvalidateProperty(DependencyProperty dp)
 {
     throw new NotImplementedException("DependencyObject - InvalidateProperty(DependencyProperty dp)");
 }
예제 #14
0
        public object GetValue(DependencyProperty dp)
        {
            if (dp == null)
                throw new ArgumentNullException("dp");

            if (_properties.ContainsKey(dp))
            {
                object val = _properties[dp];
                return val ?? dp.DefaultMetadata.DefaultValue;
                //return val == null ? dp.DefaultMetadata.DefaultValue : val;
            }
            return dp.DefaultMetadata.DefaultValue;
        }
예제 #15
0
 internal LocalValueEntry(DependencyProperty property, object value)
 {
     _property = property;
     _value = value;
 }
예제 #16
0
 internal DependencyPropertyKey(DependencyProperty dependencyProperty)
 {
     _dependencyProperty = dependencyProperty;
 }
예제 #17
0
        protected virtual void Merge(PropertyMetadata baseMetadata, DependencyProperty dp)
        {
            if (baseMetadata == null)
                throw new ArgumentNullException("baseMetadata");

            if (dp == null)
                throw new ArgumentNullException("dp");

            if (_defaultValue == null)
                _defaultValue = baseMetadata._defaultValue;

            if (_propertyChangedCallback == null)
                _propertyChangedCallback = baseMetadata._propertyChangedCallback;

            if (_coerceValueCallback == null)
                _coerceValueCallback = baseMetadata._coerceValueCallback;
        }
예제 #18
0
        internal static void Register(Type t, DependencyProperty dp)
        {
            if (!PropertyDeclarations.ContainsKey(t))
                PropertyDeclarations[t] = new Dictionary<string, DependencyProperty>();

            Dictionary<string, DependencyProperty> typeDeclarations = PropertyDeclarations[t];
            if (!typeDeclarations.ContainsKey(dp.Name))
                typeDeclarations[dp.Name] = dp;
            else
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "'{0}' property was already registered by '{1}'.", dp.Name, t.Name));
        }
예제 #19
0
 internal void DoMerge(PropertyMetadata baseMetadata, DependencyProperty dp, Type targetType)
 {
     Merge(baseMetadata, dp);
     OnApply(dp, targetType);
     _isSealed = true;
 }
예제 #20
0
 protected void OnFreezablePropertyChanged(DependencyObject oldValue, DependencyObject newValue, DependencyProperty property)
 {
     throw new NotImplementedException("Freezable.OnFreezablePropertyChanged");
 }