public override SceneNode GenerateConverter()
        {
            IDocumentContext documentContext = this.valueConverter.DocumentContext;
            DocumentNode     keyNode         = (DocumentNode)documentContext.CreateNode(this.DisplayName);

            return(this.valueConverter.ViewModel.GetSceneNode((DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(documentContext, keyNode)));
        }
예제 #2
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));
        }
예제 #3
0
        private BindingSceneNode CreateFallbackBind(SceneViewModel viewModel, string bindingPath, SceneNode targetNode, IProperty targetProperty)
        {
            BindingSceneNode binding = BindingSceneNode.Factory.Instantiate(viewModel);

            if (this.ResourceKey != null)
            {
                DocumentNode keyNode = this.ResourceKey.Clone(viewModel.Document.DocumentContext);
                binding.Source = (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(viewModel.Document.DocumentContext, keyNode);
            }
            if (bindingPath.Length > 0)
            {
                binding.XPath = bindingPath;
            }
            using (targetNode.ViewModel.AnimationEditor.DeferKeyFraming())
                targetNode.SetBinding((IPropertyId)targetProperty, binding);
            return(binding);
        }
예제 #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
        private SceneNode CreateDataSource(SceneNode target, DataSchemaNodePath bindingPath, bool isSourcePathLess)
        {
            DocumentNode resourceKey = bindingPath.Schema.DataSource.ResourceKey;

            if (resourceKey == null)
            {
                if (!isSourcePathLess && !string.IsNullOrEmpty(bindingPath.Path))
                {
                    return((SceneNode)null);
                }
                DocumentNode documentNode   = bindingPath.Schema.DataSource.DocumentNode;
                IProjectItem designDataFile = DesignDataHelper.GetDesignDataFile(documentNode);
                DocumentNode node;
                if (designDataFile != null)
                {
                    node = DesignDataHelper.CreateDesignDataExtension(designDataFile, target.DocumentContext);
                }
                else
                {
                    if (PlatformTypes.FrameworkElement.IsAssignableFrom((ITypeId)bindingPath.Schema.DataSource.DocumentNode.Type))
                    {
                        return((SceneNode)null);
                    }
                    node = documentNode.Clone(target.DocumentContext);
                }
                return(target.ViewModel.GetSceneNode(node));
            }
            if (!this.EnsureDataSourceReachable(target, bindingPath.Schema.DataSource))
            {
                return((SceneNode)null);
            }
            BindingSceneNode bindingSceneNode = BindingSceneNode.Factory.Instantiate(target.ViewModel);
            DocumentNode     keyNode          = resourceKey.Clone(target.DocumentContext);

            bindingSceneNode.Source = (DocumentNode)DocumentNodeUtilities.NewStaticResourceNode(keyNode.Context, keyNode);
            return((SceneNode)bindingSceneNode);
        }
예제 #6
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();
     }
 }
예제 #7
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);
        }
예제 #8
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);
        }