예제 #1
0
        public void Foreign_Class_Should_Return_Registered_Metadata_If_None_Supplied()
        {
            DependencyProperty dp = DependencyProperty.Register(
                "Foreign_Class_Should_Return_Registered_Metadata_If_None_Supplied",
                typeof(string),
                typeof(TestClass1));

            PropertyMetadata result1 = dp.GetMetadata(typeof(TestClass1));
            PropertyMetadata result4 = dp.GetMetadata(typeof(TestClass4));

            Assert.AreSame(result1, result4);
        }
예제 #2
0
        /// <inheritdoc/>
        protected override bool ApplyTemplateCore()
        {
            this.ratingPanel = this.GetTemplateChild("Part_RatingPanel") as StackPanel;
            if (this.ratingPanel == null)
            {
                throw new MissingTemplatePartException("Part_RatingPanel", typeof(StackPanel));
            }

            if (this.itemsSource.Count != 0)
            {
                if (!this.IsItemsSourceManual)
                {
                    throw new InvalidOperationException(AutoGeneratedItemsCountExceptionMessage);
                }

                this.SetValue(AutoGeneratedItemsCountProperty, 0);
            }
            else
            {
                if (this.AutoGeneratedItemsCount == (int)AutoGeneratedItemsCountProperty.GetMetadata(typeof(int)).DefaultValue)
                {
                    this.SetValue(AutoGeneratedItemsCountProperty, (int)AutoGeneratedItemsCountProperty.GetMetadata(typeof(int)).DefaultValue);
                }

                this.GenerateRatingItems();
            }

            this.PopulateRatingPanel();

            double coercedValue = RadMath.CoerceValue(this.Value, 0, this.itemsSource.Count);

            if (this.Value != coercedValue)
            {
                this.SetValuePropertySilently(ValueProperty, coercedValue);
            }

            double defaultValue = (double)ValueProperty.GetMetadata(typeof(double)).DefaultValue;

            if (this.Value != defaultValue)
            {
                this.HandleValueChange(defaultValue, this.Value);
            }

            this.UpdateDisplayValue();
            this.UpdateFillRatio();
            this.UpdateVisualState(false);

            return(base.ApplyTemplateCore());
        }
예제 #3
0
파일: DPHelper.cs 프로젝트: SmaSTra/SmaSTra
        private PropertyMetadata GetMetadataClone(DependencyProperty property, Type type)
        {
            PropertyMetadata metadata            = property.GetMetadata(type);
            Tuple <DependencyProperty, Type> key = new Tuple <DependencyProperty, Type>(property, type);

            if (metadata != null && this.properties.ContainsKey(key))
            {
                metadata = this.properties[key];
            }
            else
            {
                if (metadata == null)
                {
                    metadata = new PropertyMetadata();
                }
                else
                {
                    metadata = metadata.Clone();
                }

                this.properties.Add(key, metadata);
            }

            return(metadata);
        }
예제 #4
0
        private void AssertBinding(FrameworkElement targetElement, string targetName, DependencyProperty targetProperty,
                                   string expectedBindingPath, BindingMode allowedBindingMode)
        {
            BindingExpression binding = targetElement.GetBindingExpression(targetProperty);
            var errorMessage          =
                $"Invalid 'Binding' for the '{targetProperty.Name}' property of {targetName}.";

            Assert.That(binding, Is.Not.Null, errorMessage);
            Assert.That(binding.ParentBinding.Path.Path, Is.EqualTo(expectedBindingPath), errorMessage);

            var allowedBindingModes = new List <BindingMode> {
                allowedBindingMode
            };
            var metaData = (FrameworkPropertyMetadata)targetProperty.GetMetadata(targetElement);

            if (allowedBindingMode == BindingMode.TwoWay && metaData.BindsTwoWayByDefault)
            {
                allowedBindingModes.Add(BindingMode.Default);
            }
            else if (allowedBindingMode == BindingMode.OneWay)
            {
                allowedBindingModes.Add(BindingMode.Default);
            }
            Assert.That(allowedBindingModes, Has.One.EqualTo(binding.ParentBinding.Mode), errorMessage);
        }
        internal static void OverrideMetadataWithCoerceMethod(this DependencyProperty property, Type forType, CoerceValueCallback coerceValueCallback)
        {
            var metadata = property.GetMetadata(property.OwnerType);

            if (metadata.GetType() == typeof(PropertyMetadata))
            {
                property.OverrideMetadata(
                    forType,
                    new PropertyMetadata(
                        metadata.DefaultValue,
                        metadata.PropertyChangedCallback,
                        coerceValueCallback));
                return;
            }

            if (metadata.GetType() == typeof(FrameworkPropertyMetadata))
            {
                var fpm   = (FrameworkPropertyMetadata)metadata;
                var flags = GetFlags(fpm);
                property.OverrideMetadata(
                    forType,
                    new FrameworkPropertyMetadata(
                        metadata.DefaultValue,
                        flags,
                        metadata.PropertyChangedCallback,
                        coerceValueCallback,
                        fpm.IsAnimationProhibited,
                        fpm.DefaultUpdateSourceTrigger));
                return;
            }

            var message = $"Can only be called for properties with metadata of type {typeof(PropertyMetadata)}";

            throw new NotSupportedException(message);
        }
예제 #6
0
        private void SetupBinding(object source)
        {
            //sanity check
            if (source == null)
            {
                return;
            }

            var boundObject = GetObjectFromPath(source, Path.Path);

            if (boundObject == null)
            {
                return;
            }

            //set default BindingMode
            if (Mode == BindingMode.Default)
            {
                if (bindingProperty.GetMetadata(bindingTarget) is FrameworkPropertyMetadata metadata &&
                    metadata.BindsTwoWayByDefault)
                {
                    Mode = BindingMode.TwoWay;
                }
                else
                {
                    Mode = BindingMode.OneWay;
                }
            }
        /// <summary>
        /// Sets the value of the specified target object and property, based on the specified source property.
        /// </summary>
        /// <param name="sourceProperty">The source property.</param>
        /// <param name="targetElement">The target element.</param>
        /// <param name="targetProperty">The target property.</param>
        protected virtual void ApplyValue(DependencyProperty sourceProperty, FrameworkElement targetElement, DependencyProperty targetProperty)
        {
            if (sourceProperty == null)
            {
                throw new ArgumentNullException("sourceProperty");
            }
            else if (targetElement == null)
            {
                throw new ArgumentNullException("targetElement");
            }
            else if (targetProperty == null)
            {
                throw new ArgumentNullException("targetProperty");
            }

            // 8/22/2011 - If the property is not set on the column, then do not pass down to the element (10F-15E35C2E-480E)
            // 1/27/2012 - Fixed issue with column default that differ from the column not getting passed down properly (197-16B573BD-0301)
            if (DependencyPropertyHelper.GetValueSource(this, sourceProperty).BaseValueSource == BaseValueSource.Default &&
                DefaultValuesEqual(sourceProperty.GetMetadata(this), targetProperty.GetMetadata(targetElement)))
            {
                targetElement.ClearValue(targetProperty);
            }
            else
            {
                targetElement.SetValue(targetProperty, this.GetValue(sourceProperty));
            }
        }
예제 #8
0
 /// <summary>
 ///     Creates a new dependency property descriptor.  A note on perf:  We don't
 ///     pass the property descriptor down as the default member descriptor here.  Doing
 ///     so takes the attributes off of the property descriptor, which can be costly if they
 ///     haven't been accessed yet.  Instead, we wait until someone needs to access our
 ///     Attributes property and demand create the attributes at that time.
 /// </summary>
 internal DependencyObjectPropertyDescriptor(DependencyProperty dp, Type ownerType)
     : base(string.Concat(dp.OwnerType.Name, ".", dp.Name), null)
 {
     _dp            = dp;
     _componentType = ownerType;
     _metadata      = _dp.GetMetadata(ownerType);
 }
        public static void GetNotificationParameters(DependencyObject target, DependencyProperty targetProperty, ref BindingMode bindingMode, ref UpdateSourceTrigger updateSourceTrigger)
        {
#if WPF
            if (target != null && targetProperty != null)
            {
                var metadata = targetProperty.GetMetadata(target);
                if (metadata is FrameworkPropertyMetadata frameworkPropertyMetadata)
                {
                    if (bindingMode == BindingMode.Default)
                    {
                        bindingMode = frameworkPropertyMetadata.BindsTwoWayByDefault ? BindingMode.TwoWay : BindingMode.OneWay;
                    }

                    if (updateSourceTrigger == UpdateSourceTrigger.Default)
                    {
                        updateSourceTrigger = frameworkPropertyMetadata.DefaultUpdateSourceTrigger;
                    }
                }
            }
#endif

            if (updateSourceTrigger == UpdateSourceTrigger.Default)
            {
                updateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            }
        }
        void TargetUpdated(object sender, DataTransferEventArgs e)
        {
            // Trigger a property changed callback as long as the new value equals the default value.
            object           current  = DependencyObject.GetValue(DependencyProperty);
            PropertyMetadata metaData = DependencyProperty.GetMetadata(DependencyObject);
            bool             equals   = current == null ? metaData.DefaultValue == null : current.Equals(metaData.DefaultValue);

            if (equals)
            {
                if (metaData.PropertyChangedCallback != null)
                {
                    metaData.PropertyChangedCallback.Invoke(
                        DependencyObject,
                        new DependencyPropertyChangedEventArgs(
                            DependencyProperty,
                            current,
                            current));
                }
            }
            else
            {
                // Once it is no longer the default value, we know it has been changed.
                _frameworkElement.TargetUpdated -= TargetUpdated;
                NotifyOnTargetUpdated            = _prevNotifyOnTargetUpdated;
            }
        }
        public void Should_Merge_Metadata_If_Supplied()
        {
            FrameworkPropertyMetadata metadata1 = new FrameworkPropertyMetadata(
                "foo",
                FrameworkPropertyMetadataOptions.Inherits,
                this.PropertyChangedCallback1,
                this.CoerceCallback1);

            DependencyProperty dp = DependencyProperty.Register(
                "Should_Merge_Metadata_If_Supplied",
                typeof(string),
                typeof(TestClass1),
                metadata1);

            FrameworkPropertyMetadata metadata2 = new FrameworkPropertyMetadata(
                "bar",
                FrameworkPropertyMetadataOptions.Inherits | FrameworkPropertyMetadataOptions.AffectsRender,
                this.PropertyChangedCallback2,
                this.CoerceCallback2);

            dp.AddOwner(typeof(TestClass2), metadata2);

            FrameworkPropertyMetadata result = dp.GetMetadata(typeof(TestClass2)) as FrameworkPropertyMetadata;

            Assert.IsNotNull(result);
            Assert.AreNotSame(metadata1, result);
            Assert.AreSame(metadata2, result);
            Assert.AreEqual("bar", result.DefaultValue);
            Assert.IsTrue(result.Inherits);
            Assert.IsTrue(result.AffectsRender);
            Assert.AreEqual(2, result.PropertyChangedCallback.GetInvocationList().Length);
            Assert.AreEqual(1, result.CoerceValueCallback.GetInvocationList().Length);
        }
예제 #12
0
 private static void RefreshCanExecute(DependencyProperty commandProperty, Type controlType, DependencyObject d, object value)
 {
     if (value == null)
     {
         return;
     }
     commandProperty.GetMetadata(controlType).PropertyChangedCallback(d, new DependencyPropertyChangedEventArgs(commandProperty, value, null));
 }
예제 #13
0
 private DependencyPropertyDescriptor(PropertyDescriptor property, Type componentType, DependencyProperty dependencyProperty)
     : base(dependencyProperty.Name, null)
 {
     _property           = property;
     _componentType      = componentType;
     _dependencyProperty = dependencyProperty;
     _metadata           = dependencyProperty.GetMetadata(componentType);
 }
예제 #14
0
        public static void SetDefaultValue <TForClass>(this DependencyProperty property, object value)
            where TForClass : DependencyObject
        {
            if (value == null)
            {
                if (property.PropertyType.IsValueType)
                {
                    throw new ArgumentException("The new default value cannot be null.");
                }
            }
            else
            {
                if (!property.PropertyType.IsInstanceOfType(value))
                {
                    throw new ArgumentException("The new default value is not a valid type.");
                }
            }

            PropertyMetadata newPmd;

            PropertyMetadata pmd = property.GetMetadata(DependencyObjectType.FromSystemType(typeof(TForClass).BaseType ?? typeof(object)));

            if (pmd is FrameworkPropertyMetadata)
            {
                FrameworkPropertyMetadata fpmd = pmd as FrameworkPropertyMetadata;
                newPmd = new FrameworkPropertyMetadata()
                {
                    IsAnimationProhibited      = fpmd.IsAnimationProhibited,
                    DefaultUpdateSourceTrigger = fpmd.DefaultUpdateSourceTrigger,
                    AffectsRender        = fpmd.AffectsRender,
                    AffectsMeasure       = fpmd.AffectsMeasure,
                    AffectsArrange       = fpmd.AffectsArrange,
                    AffectsParentMeasure = fpmd.AffectsParentMeasure,
                    AffectsParentArrange = fpmd.AffectsParentArrange,
                    BindsTwoWayByDefault = fpmd.BindsTwoWayByDefault,
                    Inherits             = fpmd.Inherits,
                    IsNotDataBindable    = fpmd.IsNotDataBindable,
                    Journal = fpmd.Journal,
                    OverridesInheritanceBehavior   = fpmd.OverridesInheritanceBehavior,
                    SubPropertiesDoNotAffectRender = fpmd.SubPropertiesDoNotAffectRender
                };
            }
            else
            {
                newPmd = new PropertyMetadata();
            }

            if (pmd != null)
            {
                newPmd.CoerceValueCallback     = pmd.CoerceValueCallback;
                newPmd.PropertyChangedCallback = pmd.PropertyChangedCallback;
            }

            newPmd.DefaultValue = value;

            property.OverrideMetadata(typeof(TForClass), newPmd);
        }
예제 #15
0
        public static void Override(this DependencyProperty property,
                                    Type elementType,
                                    Action <DependencyObject, DependencyPropertyChangedEventArgs, PropertyChangedCallback> changed = null,
                                    Func <DependencyObject, object, CoerceValueCallback, object> coerce = null,
                                    Action <PropertyMetadata, PropertyMetadata> factory = null)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }
            if (elementType == null)
            {
                throw new ArgumentNullException(nameof(elementType));
            }

            var oldPropertyMetadata  = property.GetMetadata(elementType);
            var propertyMetadataType = oldPropertyMetadata.GetType();

            var newPropertyMetadata = (PropertyMetadata)Activator.CreateInstance(propertyMetadataType);

            newPropertyMetadata.DefaultValue = oldPropertyMetadata.DefaultValue;
            if (changed != null)
            {
                newPropertyMetadata.PropertyChangedCallback = (o, args) => changed(o, args, oldPropertyMetadata.PropertyChangedCallback);
            }
            if (coerce != null)
            {
                newPropertyMetadata.CoerceValueCallback = (o, args) => coerce(o, args, oldPropertyMetadata.CoerceValueCallback);
            }

            if (oldPropertyMetadata is UIPropertyMetadata oldUIPropertyMetadata &&
                newPropertyMetadata is UIPropertyMetadata newUIPropertyMetadata)
            {
                newUIPropertyMetadata.IsAnimationProhibited = oldUIPropertyMetadata.IsAnimationProhibited;
            }

            if (oldPropertyMetadata is FrameworkPropertyMetadata oldFrameworkPropertyMetadata &&
                newPropertyMetadata is FrameworkPropertyMetadata newFrameworkPropertyMetadata)
            {
                newFrameworkPropertyMetadata.AffectsArrange             = oldFrameworkPropertyMetadata.AffectsArrange;
                newFrameworkPropertyMetadata.AffectsMeasure             = oldFrameworkPropertyMetadata.AffectsMeasure;
                newFrameworkPropertyMetadata.AffectsParentArrange       = oldFrameworkPropertyMetadata.AffectsParentArrange;
                newFrameworkPropertyMetadata.AffectsParentMeasure       = oldFrameworkPropertyMetadata.AffectsParentMeasure;
                newFrameworkPropertyMetadata.AffectsRender              = oldFrameworkPropertyMetadata.AffectsRender;
                newFrameworkPropertyMetadata.BindsTwoWayByDefault       = oldFrameworkPropertyMetadata.BindsTwoWayByDefault;
                newFrameworkPropertyMetadata.DefaultUpdateSourceTrigger = oldFrameworkPropertyMetadata.DefaultUpdateSourceTrigger;
                newFrameworkPropertyMetadata.Inherits          = oldFrameworkPropertyMetadata.Inherits;
                newFrameworkPropertyMetadata.IsNotDataBindable = oldFrameworkPropertyMetadata.IsNotDataBindable;
                newFrameworkPropertyMetadata.Journal           = oldFrameworkPropertyMetadata.Journal;
                newFrameworkPropertyMetadata.SubPropertiesDoNotAffectRender = oldFrameworkPropertyMetadata.SubPropertiesDoNotAffectRender;
                newFrameworkPropertyMetadata.OverridesInheritanceBehavior   = oldFrameworkPropertyMetadata.OverridesInheritanceBehavior;
            }

            factory?.Invoke(newPropertyMetadata, oldPropertyMetadata);

            property.OverrideMetadata(elementType, newPropertyMetadata);
        }
        public void TestAddOwnerNullMetadata()
        {
            DependencyProperty p = DependencyProperty.Register("TestAddOwnerNullMetadata", typeof(string), typeof(ObjectPoker));

            p.AddOwner(typeof(SubclassPoker), null);

            PropertyMetadata pm = p.GetMetadata(typeof(SubclassPoker));

            Assert.IsNotNull(pm);
        }
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------

        #region Constructors

        /// <summary>
        ///     Creates a new dependency property descriptor.  A note on perf:  We don't
        ///     pass the property descriptor down as the default member descriptor here.  Doing
        ///     so gets the attributes off of the property descriptor, which can be costly if they
        ///     haven't been accessed yet.  Instead, we wait until someone needs to access our
        ///     Attributes property and demand create the attributes at that time.
        /// </summary>
        private DependencyPropertyDescriptor(PropertyDescriptor property, string name, Type componentType, DependencyProperty dp, bool isAttached) : base(name, null)
        {
            Debug.Assert(property != null || !isAttached, "Demand-load of property descriptor is only supported for direct properties");

            _property      = property;
            _componentType = componentType;
            _dp            = dp;
            _isAttached    = isAttached;
            _metadata      = _dp.GetMetadata(componentType);
        }
        private void UpdateBindingMode(DependencyObject targetObject, DependencyProperty targetProperty)
        {
            if (Mode != BindingMode.Default)
            {
                return;
            }

            Mode = targetProperty.GetMetadata(targetObject.GetType()) is FrameworkPropertyMetadata {
                BindsTwoWayByDefault : true
            }
예제 #19
0
 private void OnColumnCountChanged(int newValue)
 {
     if (newValue == 0)
     {
         // If we have zero columns (i.e. binding mode), then assign the  DependencyProperty default value
         var metadata = ColumnCountProperty.GetMetadata(typeof(AnimatedSlotPanel));
         ColumnCount = (int)metadata.DefaultValue;
     }
     // Simulate a resize operation to prevent unpredictable animations
     resizeInProgress = true;
 }
        public static void RemovePropertyChanged(DependencyProperty dp, DependencyObjectType type,
                                                 DependencyPropertyChangedEventHandler handler)
        {
            var hcpm = dp.GetMetadata(type) as HandleChangesPropertyMetadata;

            if (hcpm == null)
            {
                throw new ArgumentException();
            }
            hcpm.RemovePropertyChanged(type, handler);
        }
        public void Should_Use_Base_Metadata_If_None_Supplied()
        {
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata("foo");
            DependencyProperty        dp       = DependencyProperty.Register(
                "Should_Use_Base_Metadata_If_None_Supplied",
                typeof(string),
                typeof(TestClass1),
                metadata);

            dp.AddOwner(typeof(TestClass2));
            dp.AddOwner(typeof(TestClass3));

            PropertyMetadata metadata1 = dp.GetMetadata(typeof(TestClass1));
            PropertyMetadata metadata2 = dp.GetMetadata(typeof(TestClass2));
            PropertyMetadata metadata3 = dp.GetMetadata(typeof(TestClass3));

            Assert.AreSame(metadata, metadata1);
            Assert.AreSame(metadata1, metadata2);
            Assert.AreSame(metadata2, metadata3);
        }
예제 #22
0
        public void Registered_Class_Should_Return_Metadata_If_None_Supplied()
        {
            DependencyProperty dp = DependencyProperty.Register(
                "Registered_Class_Should_Return_Metadata_If_None_Supplied",
                typeof(string),
                typeof(TestClass1));

            PropertyMetadata result = dp.GetMetadata(typeof(TestClass1));

            Assert.IsNotNull(result);
        }
예제 #23
0
 public static PropertyMetadata GetPropertyMetadata(DependencyProperty dependencyProperty, Type type)
 {
     if (typeof(DependencyObject).IsAssignableFrom(type))
     {
         PropertyMetadata metadata = dependencyProperty.GetMetadata(type);
         if (metadata != null)
         {
             return(metadata);
         }
     }
     return(dependencyProperty.DefaultMetadata);
 }
예제 #24
0
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------

        #region Constructors

        /// <summary>
        ///     Creates a new dependency property descriptor.  A note on perf:  We don't
        ///     pass the property descriptor down as the default member descriptor here.  Doing
        ///     so takes the attributes off of the property descriptor, which can be costly if they
        ///     haven't been accessed yet.  Instead, we wait until someone needs to access our
        ///     Attributes property and demand create the attributes at that time.
        /// </summary>
        internal DependencyObjectPropertyDescriptor(PropertyDescriptor property, DependencyProperty dp, Type objectType)
            : base(dp.Name, null)
        {
            _property = property;
            _dp       = dp;

            Debug.Assert(property != null && dp != null);
            Debug.Assert(!(property is DependencyObjectPropertyDescriptor), "Wrapping a DP in a DP");

            _componentType = property.ComponentType;
            _metadata      = _dp.GetMetadata(objectType);
        }
예제 #25
0
        internal virtual void OnComponentTypeChanged()
        {
            if (this.owner != null)
            {
                this.SetStepFromDateTime(this.owner.Step);
            }
            else
            {
                this.Step = (int)StepProperty.GetMetadata(typeof(int)).DefaultValue;
            }

            this.IsLoopingEnabled = this.GetCanLoop();
        }
예제 #26
0
        public void Registered_Class_Should_Return_Metadata()
        {
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata("foo");
            DependencyProperty        dp       = DependencyProperty.Register(
                "Registered_Class_Should_Return_Metadata",
                typeof(string),
                typeof(TestClass1),
                metadata);

            PropertyMetadata result = dp.GetMetadata(typeof(TestClass1));

            Assert.AreSame(metadata, result);
        }
        // Token: 0x06001C70 RID: 7280 RVA: 0x00085BF8 File Offset: 0x00083DF8
        internal static PriorityBindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, PriorityBinding binding, BindingExpressionBase owner)
        {
            FrameworkPropertyMetadata frameworkPropertyMetadata = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;

            if ((frameworkPropertyMetadata != null && !frameworkPropertyMetadata.IsDataBindingAllowed) || dp.ReadOnly)
            {
                throw new ArgumentException(SR.Get("PropertyNotBindable", new object[]
                {
                    dp.Name
                }), "dp");
            }
            return(new PriorityBindingExpression(binding, owner));
        }
예제 #28
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));
            }
        }
        public void ResetValue(DependencyObject _this, DependencyProperty dp)
        {
            var md = dp.GetMetadata(_this.GetType());

            if (_this.GetValue(dp).Equals(md.DefaultValue))
            {
                var args = new DependencyPropertyChangedEventArgs(dp, DependencyProperty.UnsetValue, md.DefaultValue);
                md.PropertyChangedCallback?.Invoke(_this, args);
            }
            else
            {
                _this.ClearValue(dp);
            }
        }
예제 #30
0
 private static void DisableWindowsTransparency(DependencyProperty dp, Type type)
 {
     try {
         var m = dp.GetMetadata(type);
         var p = m.GetType().GetProperty("Sealed",
                                         System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
                 ?? throw new Exception(@"Sealed property is missing");
         p.SetValue(m, false);
         m.CoerceValueCallback = (d, o) => false;
         p.SetValue(m, true);
     } catch (Exception e) {
         Logging.Error(e);
     }
 }
예제 #31
0
    //------------------------------------------------------
    //
    //  Internal Methods
    //
    //------------------------------------------------------

    // Create a new BindingExpression from the given Binding description
    internal static MultiBindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, MultiBinding binding, BindingExpressionBase owner)
    {
        FrameworkPropertyMetadata fwMetaData = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;

        if ((fwMetaData != null && !fwMetaData.IsDataBindingAllowed) || dp.ReadOnly)
            throw new ArgumentException(SR.Get(SRID.PropertyNotBindable, dp.Name), "dp");

        // create the BindingExpression
        MultiBindingExpression bindExpr = new MultiBindingExpression(binding, owner);

        bindExpr.ResolvePropertyDefaultSettings(binding.Mode, binding.UpdateSourceTrigger, fwMetaData);

        return bindExpr;
    }
예제 #32
0
    //------------------------------------------------------
    //
    //  Internal Methods
    //
    //------------------------------------------------------

    // Create a new BindingExpression from the given Binding description
    internal static PriorityBindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, PriorityBinding binding, BindingExpressionBase owner)
    {
        FrameworkPropertyMetadata fwMetaData = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;

        if ((fwMetaData != null && !fwMetaData.IsDataBindingAllowed) || dp.ReadOnly)
            throw new ArgumentException(SR.Get(SRID.PropertyNotBindable, dp.Name), "dp");

        // create the BindingExpression
        PriorityBindingExpression bindExpr = new PriorityBindingExpression(binding, owner);

        return bindExpr;
    }
        // Writes a value of an individual non-inheritable property in form of attribute string.
        // If the value cannot be serialized as a string, adds the property to a collection of complexProperties.
        // To minimize the amount of xaml produced, the property is skipped if its value is equal to its default value
        // for the given element type - the propertyOwnerType.
        // The flag onlyAffected=false means that we want to output all properties independently on
        // if they are equal to their default values or not.
        private static void WriteNoninheritableProperty(XmlWriter xmlWriter, DependencyProperty property, object propertyValue, Type propertyOwnerType, bool onlyAffected, DependencyObject complexProperties, object localValue)
        {
            bool write = false;
            if (propertyValue != null &&
                propertyValue != DependencyProperty.UnsetValue)
            {
                if (!onlyAffected)
                {
                    write = true;
                }
                else
                {
                    PropertyMetadata metadata = property.GetMetadata(propertyOwnerType);

                    write = (metadata == null) || !(TextSchema.ValuesAreEqual(propertyValue, /*defaultValue*/metadata.DefaultValue) && localValue == DependencyProperty.UnsetValue);
                }
            }

            if (write)
            {
                string stringValue = DPTypeDescriptorContext.GetStringValue(property, propertyValue);

                if (stringValue != null)
                {
                    stringValue = FilterNaNStringValueForDoublePropertyType(stringValue, property.PropertyType);

                    // For the property name in this case we safe to use simple name only;
                    // as noninheritable property would never require TypeName.PropertyName notation
                    // for attribute syntax.
                    xmlWriter.WriteAttributeString(property.Name, stringValue);
                }
                else
                {
                    complexProperties.SetValue(property, propertyValue);
                }
            }
        }
예제 #34
0
파일: Form.cs 프로젝트: tfreitasleal/MvvmFx
        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));
        }
예제 #35
0
파일: Element.cs 프로젝트: Pyratron/PyraUI
 protected override void OnPropertyChanged(DependencyProperty property, object newValue, object oldValue)
 {
     var type = GetType();
     var metadata = property.GetMetadata(type);
     // Handle metadata properties when property value is changed.
     if (metadata.AffectsMeasure)
         InvalidateMeasure();
     if (metadata.AffectsArrange)
         InvalidateArrange();
     if (metadata.AffectsParentArrange)
         Parent?.InvalidateArrange();
     if (metadata.AffectsParentMeasure)
         Parent?.InvalidateMeasure();
 }
예제 #36
0
 private static BindingMode GetDefaultBindingMode(DependencyObject dependencyObject, DependencyProperty dependencyProperty)
 {
     FrameworkPropertyMetadata frameworkPropertyMetadata = dependencyProperty.GetMetadata(dependencyObject.GetType()) as FrameworkPropertyMetadata;
     return frameworkPropertyMetadata != null && frameworkPropertyMetadata.BindsTwoWayByDefault ? BindingMode.TwoWay : BindingMode.OneWay;
 }
        [FriendAccessAllowed] // Built into Core, also used by Framework.
        internal static bool IsPropertyAnimatable(
            DependencyObject d,
            DependencyProperty dp)
        {
            //



            if (dp.PropertyType != typeof(Visual3DCollection) && dp.ReadOnly)
            {
                return false;
            }

            UIPropertyMetadata uiMetadata = dp.GetMetadata(d.DependencyObjectType) as UIPropertyMetadata;

            if (   uiMetadata != null
                && uiMetadata.IsAnimationProhibited)
            {
                return false;
            }

            return true;
        }
        private static AnimationStorage CreateStorage(
             DependencyObject d,
             DependencyProperty dp)
        {
            AnimationStorage newStorage;

            if (dp.GetMetadata(d.DependencyObjectType) is IndependentlyAnimatedPropertyMetadata)
            {
                newStorage = CreateIndependentAnimationStorageForType(dp.PropertyType);
            }
            else
            {
                newStorage = new AnimationStorage();
            }

            newStorage.Initialize(d, dp);

            return newStorage;
        }