예제 #1
0
        public DocumentNode CreateResourceReference(IDocumentContext documentContext, DocumentCompositeNode resourceNode, bool useStaticResource)
        {
            DocumentNode resourceEntryKey = ResourceNodeHelper.GetResourceEntryKey(resourceNode);

            if (resourceEntryKey == null)
            {
                return((DocumentNode)null);
            }
            DocumentNode keyNode = resourceEntryKey.Clone(documentContext);

            if (useStaticResource)
            {
                return((DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(documentContext, keyNode));
            }
            return((DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(documentContext, keyNode));
        }
예제 #2
0
        public override void SetValueToSystemResource(SceneNodeProperty propertyKey, SystemResourceModel systemResource)
        {
            PerformanceUtility.StartPerformanceSequence(PerformanceEvent.ApplyResource, "Apply system resource.");
            SceneViewModel viewModel = this.ViewModel;

            if (viewModel != null)
            {
                IDocumentContext documentContext = viewModel.Document.DocumentContext;
                IType            type            = viewModel.ProjectContext.ProjectNamespaces.GetType((IXmlNamespace)XmlNamespace.AvalonXmlNamespace, systemResource.CollectionName);
                if (type != null)
                {
                    IMember      memberId     = (IMember)type.GetMember(MemberType.LocalProperty | MemberType.Field, systemResource.ResourceName, MemberAccessTypes.Public);
                    DocumentNode documentNode = (DocumentNode)null;
                    if (memberId != null)
                    {
                        documentNode = (DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(documentContext, (DocumentNode)DocumentNodeUtilities.NewStaticNode(documentContext, memberId));
                    }
                    using (this.ShouldAllowAnimation ? (IDisposable)null : viewModel.AnimationEditor.DeferKeyFraming())
                        this.SetValue((PropertyReferenceProperty)propertyKey, (object)documentNode);
                }
            }
            PerformanceUtility.EndPerformanceSequence(PerformanceEvent.ApplyResource, "Apply resource.");
        }
예제 #3
0
 protected void SetToResourceInternal(PropertyReference propertyReference, LocalResourceModel resourceModel)
 {
     using (SceneEditTransaction editTransaction = this.ViewModel.CreateEditTransaction(string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.PropertySetUndo, new object[1]
     {
         (object)this.TargetProperty.Name
     })))
     {
         IDocumentContext documentContext       = this.ViewModel.Document.DocumentContext;
         DocumentNode     keyNode               = resourceModel.ResourceKey.Clone(documentContext);
         DocumentNode     resourceExtensionNode = !(propertyReference[0] is DependencyPropertyReferenceStep) || !JoltHelper.TypeSupported((ITypeResolver)this.ViewModel.ProjectContext, PlatformTypes.DynamicResource) ? (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(documentContext, keyNode) : (DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(documentContext, keyNode);
         this.TargetElement.SetValue(propertyReference, (object)resourceExtensionNode);
         Microsoft.Expression.DesignSurface.Utility.ResourceHelper.EnsureReferencedResourcesAreReachable(resourceModel.ResourceNode, resourceExtensionNode);
         editTransaction.Commit();
     }
 }
예제 #4
0
        public override void SetValueToLocalResource(SceneNodeProperty propertyKey, LocalResourceModel localResource)
        {
            DocumentNode resourceKey = localResource.ResourceKey;

            PerformanceUtility.StartPerformanceSequence(PerformanceEvent.ApplyResource, "Apply resource.");
            SceneViewModel viewModel = this.ViewModel;

            if (viewModel != null)
            {
                IDocumentContext documentContext = viewModel.Document.DocumentContext;
                IProjectContext  projectContext  = viewModel.ProjectContext;
                DocumentNode     keyNode         = resourceKey.Clone(documentContext);
                bool             flag            = this.CanSetDynamicExpression && JoltHelper.TypeSupported((ITypeResolver)projectContext, PlatformTypes.DynamicResource);
                if (flag && this.ShouldAllowAnimation && (propertyKey.IsEnabledRecordCurrentValue && this.ViewModel.AnimationEditor.IsRecording))
                {
                    flag = false;
                }
                DocumentNode documentNode = !flag ? (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(documentContext, keyNode) : (DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(documentContext, keyNode);
                using (this.ShouldAllowAnimation ? (IDisposable)null : viewModel.AnimationEditor.DeferKeyFraming())
                {
                    string description = string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.PropertyChangeUndoDescription, new object[1]
                    {
                        (object)((PropertyEntry)propertyKey).get_PropertyName()
                    });
                    if (viewModel.Document.IsEditable)
                    {
                        using (SceneEditTransaction editTransaction = viewModel.CreateEditTransaction(description))
                        {
                            this.SetValue((PropertyReferenceProperty)propertyKey, (object)documentNode);
                            bool         isMixed;
                            DocumentNode valueAsDocumentNode = this.GetLocalValueAsDocumentNode(propertyKey, GetLocalValueFlags.CheckKeyframes, out isMixed);
                            if (!isMixed && valueAsDocumentNode != null)
                            {
                                Microsoft.Expression.DesignSurface.Utility.ResourceHelper.EnsureReferencedResourcesAreReachable(localResource.ResourceNode, valueAsDocumentNode);
                            }
                            editTransaction.Commit();
                        }
                    }
                }
            }
            PerformanceUtility.EndPerformanceSequence(PerformanceEvent.ApplyResource, "Apply resource.");
        }
예제 #5
0
        public bool ApplyStyle(SceneNode node)
        {
            BaseFrameworkElement frameworkElement = node as BaseFrameworkElement;

            if (frameworkElement == null || !this.StyleType.IsAssignableFrom((ITypeId)frameworkElement.Type))
            {
                return(false);
            }
            ResourceDictionaryAssetProvider dictionaryAssetProvider = this.Provider as ResourceDictionaryAssetProvider;

            if (dictionaryAssetProvider != null && dictionaryAssetProvider.ContentProvider != null && !dictionaryAssetProvider.ContentProvider.EnsureLinked(frameworkElement.ViewModel) || frameworkElement.DocumentNodePath.Contains(this.ResourceModel.ValueNode))
            {
                return(false);
            }
            IDocumentContext context   = frameworkElement.DocumentNode.Context;
            DocumentNode     valueNode = !JoltHelper.TypeSupported((ITypeResolver)frameworkElement.ProjectContext, PlatformTypes.DynamicResource) ? (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(context, this.ResourceModel.KeyNode.Clone(context)) : (DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(context, this.ResourceModel.KeyNode.Clone(context));

            frameworkElement.SetLocalValue(BaseFrameworkElement.StyleProperty, valueNode);
            return(true);
        }
예제 #6
0
        private void ApplyResourceOnExistingElement(SceneElement targetElement, IPropertyId targetProperty, ResourceEntryItem resource)
        {
            if (resource.Resource.KeyNode != null || targetProperty.Equals((object)BaseFrameworkElement.StyleProperty))
            {
                using (SceneEditTransaction editTransaction = this.ActiveDocument.CreateEditTransaction(string.Format((IFormatProvider)CultureInfo.CurrentCulture, StringTable.PropertySetUndo, new object[1]
                {
                    (object)targetProperty.Name
                })))
                {
                    if (resource.Resource.KeyNode != null)
                    {
                        IDocumentContext documentContext = this.ActiveSceneViewModel.Document.DocumentContext;
                        IProjectContext  projectContext  = this.ActiveSceneViewModel.Document.ProjectContext;
                        DocumentNode     keyNode         = resource.Resource.KeyNode.Clone(documentContext);
                        DocumentNode     documentNode    = !(projectContext.ResolveProperty(targetProperty) is DependencyPropertyReferenceStep) || !JoltHelper.TypeSupported((ITypeResolver)projectContext, PlatformTypes.DynamicResource) ? (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(documentContext, keyNode) : (DocumentNode)DocumentNodeUtilities.NewDynamicResourceNode(documentContext, keyNode);
                        targetElement.SetValue(targetProperty, (object)documentNode);
                    }
                    else if (targetProperty.Equals((object)BaseFrameworkElement.StyleProperty))
                    {
                        targetElement.ClearValue(targetProperty);
                    }
                    editTransaction.Commit();
                }
            }
            ResourceManager   resourceManager   = this.ActiveSceneViewModel.DesignerContext.ResourceManager;
            DocumentReference documentReference = resource.Container.DocumentReference;

            if (resource.Resource.IsResourceReachable((SceneNode)targetElement) || !(documentReference != resourceManager.ActiveRootContainer.DocumentReference) || !(documentReference != resourceManager.TopLevelResourceContainer.DocumentReference))
            {
                return;
            }
            resourceManager.LinkToResource(resourceManager.TopLevelResourceContainer, documentReference);
        }