private void Rebuild(object sender, EventArgs args)
 {
     if (this.targetPropertyEntry != null)
     {
         this.targetPropertyEntry.OnRemoveFromCategory();
         this.targetPropertyEntry = (SceneNodeProperty)null;
     }
     if (this.contextHelper.EditingProperty != null && this.contextHelper.CurrentProperty != null)
     {
         SceneNodeObjectSetBase nodeObjectSetBase = (SceneNodeObjectSetBase)this.contextHelper.EditingProperty.ObjectSet;
         ReferenceStep          referenceStep     = (ReferenceStep)nodeObjectSetBase.ProjectContext.ResolveProperty(ChangePropertyActionNode.ValueProperty);
         PropertyPickerExtendedEditor.WrapperObjectSet wrapperObjectSet = new PropertyPickerExtendedEditor.WrapperObjectSet((SceneNodeObjectSet)nodeObjectSetBase, referenceStep, this.contextHelper.CurrentProperty);
         this.targetPropertyEntry = (SceneNodeProperty) new PropertyPickerExtendedEditor.WrapperTypedSceneNodeProperty((SceneNodeObjectSet)wrapperObjectSet, new PropertyReference(referenceStep), this.contextHelper.CurrentProperty.Name, this.contextHelper.CurrentProperty.Attributes, this.contextHelper.CurrentProperty.PropertyType.RuntimeType, (ITypeResolver)nodeObjectSetBase.ProjectContext);
         this.targetPropertyEntry.Recache();
         wrapperObjectSet.TargetProperty      = this.targetPropertyEntry;
         this.propertyContainer.PropertyEntry = (PropertyEntry)this.targetPropertyEntry;
         if (this.propertyContainer.ExtendedEditorTemplate == null)
         {
             return;
         }
         this.propertyContainer.ActiveEditMode = PropertyContainerEditMode.ExtendedPinned;
     }
     else
     {
         this.propertyContainer.PropertyEntry = (PropertyEntry)null;
     }
 }
        private void UpdateFromDataContext()
        {
            this.UnhookEditingProperty();
            Microsoft.Windows.Design.PropertyEditing.PropertyValue propertyValue = this.hostControl.DataContext as Microsoft.Windows.Design.PropertyEditing.PropertyValue;
            if (propertyValue != null)
            {
                this.editingProperty = (PropertyReferenceProperty)propertyValue.ParentProperty;
            }
            if (this.editingProperty == null)
            {
                return;
            }
            this.editingProperty.PropertyReferenceChanged += new Microsoft.Expression.DesignSurface.Documents.PropertyReferenceChangedEventHandler(this.OnEditingPropertyChanged);
            SceneNodeObjectSetBase nodeObjectSetBase = (SceneNodeObjectSetBase)this.editingProperty.ObjectSet;
            ReferenceStep          singleStep1       = (ReferenceStep)nodeObjectSetBase.ProjectContext.ResolveProperty(BehaviorTargetedTriggerActionNode.BehaviorTargetNameProperty);

            if (singleStep1 != null)
            {
                this.targetNameProperty = (SceneNodeProperty)nodeObjectSetBase.CreateProperty(new PropertyReference(singleStep1), (AttributeCollection)null);
                this.targetNameProperty.PropertyReferenceChanged += new Microsoft.Expression.DesignSurface.Documents.PropertyReferenceChangedEventHandler(this.OnEditingPropertyChanged);
            }
            ReferenceStep singleStep2 = (ReferenceStep)nodeObjectSetBase.ProjectContext.ResolveProperty(BehaviorTargetedTriggerActionNode.BehaviorTargetObjectProperty);

            if (singleStep2 != null)
            {
                this.targetObjectProperty = (SceneNodeProperty)nodeObjectSetBase.CreateProperty(new PropertyReference(singleStep2), (AttributeCollection)null);
                this.targetObjectProperty.PropertyReferenceChanged += new Microsoft.Expression.DesignSurface.Documents.PropertyReferenceChangedEventHandler(this.OnEditingPropertyChanged);
            }
            this.Rebuild();
        }
Esempio n. 3
0
        public override object GetValue(PropertyReference propertyReference, PropertyReference.GetValueFlags getValueFlags)
        {
            object second = null;
            bool   flag   = false;

            foreach (SceneNode sceneNode in this.Objects)
            {
                PropertyReference propertyReference1 = SceneNodeObjectSet.FilterProperty(sceneNode, propertyReference);
                if (propertyReference1 != null)
                {
                    object first;
                    if ((getValueFlags & PropertyReference.GetValueFlags.Computed) != PropertyReference.GetValueFlags.Local)
                    {
                        if (SceneNodeObjectSetBase.IsValidForGetComputedValue(sceneNode))
                        {
                            first = sceneNode.GetComputedValue(propertyReference1);
                        }
                        else
                        {
                            SceneNode         ancestor           = (SceneNode)null;
                            PropertyReference propertyReference2 = propertyReference1;
                            first = !this.ShouldWalkParentsForGetValue || !this.FindAncestor(sceneNode, out ancestor, ref propertyReference2, new Predicate <SceneNode>(SceneNodeObjectSetBase.IsValidForGetComputedValue)) ? sceneNode.GetLocalOrDefaultValue(propertyReference1) : ancestor.GetComputedValue(propertyReference2);
                        }
                    }
                    else
                    {
                        first = sceneNode.GetLocalOrDefaultValue(propertyReference1);
                    }
                    if (!flag)
                    {
                        second = first;
                        flag   = true;
                    }
                    else if (!PropertyUtilities.Compare(first, second, sceneNode.ViewModel.DefaultView))
                    {
                        second = MixedProperty.Mixed;
                        break;
                    }
                }
            }
            if (!flag)
            {
                ReferenceStep referenceStep = propertyReference[propertyReference.Count - 1];
                if (this.designerContext.ActiveView != null)
                {
                    second = referenceStep.GetDefaultValue(referenceStep.TargetType);
                }
            }
            return(second);
        }