コード例 #1
0
        public virtual void PostProcessing(SceneNode oldElement, SceneNode newElement, DocumentCompositeNode styleNode)
        {
            SceneViewModel viewModel = newElement.ViewModel;

            if (!PlatformTypes.TextBox.IsAssignableFrom((ITypeId)newElement.Type) && !PlatformTypes.ContentControl.IsAssignableFrom((ITypeId)newElement.Type))
            {
                return;
            }
            StyleNode    styleElement;
            DocumentNode templateNode = MakeControlCommand.GetTemplateNode(newElement, styleNode, out styleElement);

            if (templateNode == null)
            {
                return;
            }
            DocumentCompositeNode documentCompositeNode1 = templateNode.FindFirst(new Predicate <DocumentNode>(this.SelectTextBlockPredicate)) as DocumentCompositeNode;

            if (documentCompositeNode1 == null)
            {
                return;
            }
            TextBlockElement      textBlockSceneNode     = styleElement.ViewModel.GetSceneNode((DocumentNode)documentCompositeNode1) as TextBlockElement;
            TextBoxElement        textBoxElement         = newElement as TextBoxElement;
            ContentControlElement contentControlElement1 = newElement as ContentControlElement;

            using (SceneEditTransaction editTransaction = styleElement.ViewModel.CreateEditTransaction(this.UndoString))
            {
                DocumentCompositeNode documentCompositeNode2 = templateNode.FindFirst(new Predicate <DocumentNode>(this.SelectContentPresenterPredicate)) as DocumentCompositeNode;
                if (textBoxElement != null)
                {
                    Dictionary <IPropertyId, IPropertyId> properties = new Dictionary <IPropertyId, IPropertyId>()
                    {
                        {
                            TextBlockElement.FontFamilyProperty,
                            ControlElement.FontFamilyProperty
                        },
                        {
                            TextBlockElement.FontWeightProperty,
                            ControlElement.FontWeightProperty
                        },
                        {
                            TextBlockElement.FontSizeProperty,
                            ControlElement.FontSizeProperty
                        },
                        {
                            TextBlockElement.FontStyleProperty,
                            ControlElement.FontStyleProperty
                        },
                        {
                            TextBlockElement.TextAlignmentProperty,
                            TextBoxElement.TextAlignmentProperty
                        },
                        {
                            TextBlockElement.PaddingProperty,
                            ControlElement.PaddingProperty
                        }
                    };
                    if (viewModel.ProjectContext.ResolveProperty(TextBoxElement.TextDecorationsProperty) != null && viewModel.ProjectContext.ResolveProperty(TextBlockElement.TextDecorationsProperty) != null)
                    {
                        properties.Add(TextBlockElement.TextDecorationsProperty, TextBoxElement.TextDecorationsProperty);
                    }
                    this.SetTextPropertiesOnStyle(viewModel, styleElement, textBlockSceneNode, properties);
                    ContentControlElement contentControlElement2 = (ContentControlElement)styleElement.ViewModel.CreateSceneNode(PlatformTypes.ScrollViewer);
                    if (viewModel.ProjectContext.IsCapabilitySet(PlatformCapability.IsWpf))
                    {
                        contentControlElement2.Name = "PART_ContentHost";
                        DocumentNode documentNode = (DocumentNode)DocumentNodeUtilities.NewTemplateBindingNode((DocumentNode)documentCompositeNode1, Base2DElement.SnapsToDevicePixelsProperty);
                        contentControlElement2.SetValue(Base2DElement.SnapsToDevicePixelsProperty, (object)documentNode);
                    }
                    else
                    {
                        contentControlElement2.Name = "ContentElement";
                        DocumentNode documentNode = (DocumentNode)DocumentNodeUtilities.NewTemplateBindingNode((DocumentNode)documentCompositeNode1, ControlElement.PaddingProperty);
                        contentControlElement2.SetValue(ControlElement.PaddingProperty, (object)documentNode);
                        contentControlElement2.SetLocalValueAsWpf(ControlElement.BorderThicknessProperty, (object)new Thickness(0.0));
                        contentControlElement2.SetLocalValue(ControlElement.IsTabStopProperty, (object)false);
                    }
                    textBoxElement.SetValue(TextBoxElement.TextProperty, textBlockSceneNode.GetLocalOrDefaultValue(TextBlockElement.TextProperty));
                    if (PlatformTypes.TextBox.IsAssignableFrom((ITypeId)newElement.Type) && PlatformTypes.TextBlock.IsAssignableFrom((ITypeId)oldElement.Type))
                    {
                        this.TransferLayoutProperties(MakeControlCommand.RenderTransformsProperties, (BaseFrameworkElement)textBlockSceneNode, (SceneElement)textBoxElement);
                        bool addRenderTransforms = true;
                        this.ClearLayoutProperties(this.GetLayoutProperties((SceneElement)textBlockSceneNode, addRenderTransforms), (SceneElement)contentControlElement2);
                    }
                    else
                    {
                        bool addRenderTransforms = true;
                        this.TransferLayoutProperties(this.GetLayoutProperties((SceneElement)textBlockSceneNode, addRenderTransforms), (BaseFrameworkElement)textBlockSceneNode, (SceneElement)contentControlElement2);
                    }
                    SceneNode parent           = textBlockSceneNode.Parent;
                    IProperty propertyForChild = parent.GetPropertyForChild((SceneNode)textBlockSceneNode);
                    ISceneNodeCollection <SceneNode> collectionForProperty = parent.GetCollectionForProperty((IPropertyId)propertyForChild);
                    int index = collectionForProperty.IndexOf((SceneNode)textBlockSceneNode);
                    collectionForProperty[index] = (SceneNode)contentControlElement2;
                    if (documentCompositeNode2 != null)
                    {
                        (styleElement.ViewModel.GetSceneNode((DocumentNode)documentCompositeNode2) as ContentPresenterElement).Remove();
                    }
                }
                else
                {
                    Dictionary <IPropertyId, IPropertyId> properties = new Dictionary <IPropertyId, IPropertyId>()
                    {
                        {
                            TextBlockElement.FontFamilyProperty,
                            ControlElement.FontFamilyProperty
                        },
                        {
                            TextBlockElement.FontWeightProperty,
                            ControlElement.FontWeightProperty
                        },
                        {
                            TextBlockElement.FontSizeProperty,
                            ControlElement.FontSizeProperty
                        },
                        {
                            TextBlockElement.FontStyleProperty,
                            ControlElement.FontStyleProperty
                        }
                    };
                    this.SetTextPropertiesOnStyle(viewModel, styleElement, textBlockSceneNode, properties);
                    contentControlElement1.SetValue((IPropertyId)contentControlElement1.DefaultContentProperty, textBlockSceneNode.GetLocalOrDefaultValue(TextBlockElement.TextProperty));
                    if (documentCompositeNode2 != null)
                    {
                        ContentPresenterElement presenterElement = (ContentPresenterElement)styleElement.ViewModel.GetSceneNode((DocumentNode)documentCompositeNode2);
                        if (PlatformTypes.ContentControl.IsAssignableFrom((ITypeId)newElement.Type) && PlatformTypes.TextBlock.IsAssignableFrom((ITypeId)oldElement.Type))
                        {
                            this.TransferLayoutProperties(MakeControlCommand.RenderTransformsProperties, (BaseFrameworkElement)textBlockSceneNode, (SceneElement)newElement);
                            bool addRenderTransforms = true;
                            this.ClearLayoutProperties(this.GetLayoutProperties((SceneElement)textBlockSceneNode, addRenderTransforms), (SceneElement)presenterElement);
                        }
                        else
                        {
                            bool addRenderTransforms = true;
                            this.TransferLayoutProperties(this.GetLayoutProperties((SceneElement)textBlockSceneNode, addRenderTransforms), (BaseFrameworkElement)textBlockSceneNode, (SceneElement)presenterElement);
                        }
                    }
                    textBlockSceneNode.Remove();
                }
                if (textBlockSceneNode.IsSet(TextBlockElement.ForegroundProperty) == PropertyState.Set)
                {
                    styleElement.SetValue(ControlElement.ForegroundProperty, textBlockSceneNode.GetLocalValue(TextBlockElement.ForegroundProperty));
                }
                editTransaction.Commit();
            }
        }
コード例 #2
0
ファイル: WebDocument.cs プロジェクト: rettigcd/Outfish
 /// <summary> Throws ItemNotFoundException if node is not found. </summary>
 public HtmlNode FindFirst(string cssSelector) => DocumentNode.FindFirst(cssSelector);
コード例 #3
0
        private void ResolveDefaultStyle(SceneElement targetElement, object defaultStyleKey, bool allowDefaultStyle, out DocumentNode currentStyle, out bool isThemeStyle, out IList <DocumentCompositeNode> auxillaryResources)
        {
            IProjectContext      projectContext1      = this.SceneViewModel.ProjectContext;
            ThemeContentProvider themeContentProvider = this.DesignerContext.ThemeContentProvider;

            currentStyle       = (DocumentNode)null;
            isThemeStyle       = false;
            auxillaryResources = (IList <DocumentCompositeNode>)null;
            if (defaultStyleKey == null)
            {
                return;
            }
            IAssembly runtimeAssembly = targetElement.Type.RuntimeAssembly;
            IAssembly targetAssembly  = PlatformTypeHelper.GetTargetAssembly(targetElement.Type);
            Type      type1           = defaultStyleKey as Type;

            if (type1 != (Type)null)
            {
                ITypeId typeId = (ITypeId)projectContext1.GetType(type1);
                if (typeId != null)
                {
                    IType type2 = projectContext1.ResolveType(typeId);
                    runtimeAssembly = type2.RuntimeAssembly;
                    targetAssembly  = PlatformTypeHelper.GetTargetAssembly(type2);
                }
            }
            IAssembly designAssembly = projectContext1.GetDesignAssembly(runtimeAssembly);

            if (designAssembly != null)
            {
                currentStyle = themeContentProvider.GetThemeResourceFromAssembly(projectContext1, designAssembly, designAssembly, defaultStyleKey, out auxillaryResources);
                if (currentStyle != null)
                {
                    return;
                }
            }
            if (!PlatformTypes.IsPlatformType((ITypeId)this.Type))
            {
                foreach (IProject project in this.DesignerContext.ProjectManager.CurrentSolution.Projects)
                {
                    IProjectContext projectContext2 = (IProjectContext)ProjectXamlContext.GetProjectContext(project);
                    if (projectContext2 != null && runtimeAssembly.Equals((object)projectContext2.ProjectAssembly))
                    {
                        currentStyle = themeContentProvider.GetThemeResourceFromProject(project, defaultStyleKey, out auxillaryResources);
                        if (currentStyle != null)
                        {
                            return;
                        }
                    }
                }
            }
            else if (!allowDefaultStyle || projectContext1.PlatformMetadata.TargetFramework.Identifier == ".NETFramework" && projectContext1.PlatformMetadata.TargetFramework.Version < projectContext1.PlatformMetadata.RuntimeFramework.Version)
            {
                currentStyle = themeContentProvider.GetThemeResourceFromPlatform(projectContext1.Platform, defaultStyleKey, out auxillaryResources);
                if (currentStyle != null)
                {
                    isThemeStyle = true;
                    return;
                }
            }
            if (!projectContext1.IsCapabilitySet(PlatformCapability.IsWpf))
            {
                currentStyle = themeContentProvider.GetThemeResourceFromAssembly(projectContext1, runtimeAssembly, targetAssembly, defaultStyleKey, out auxillaryResources);
                isThemeStyle = currentStyle != null;
            }
            else
            {
                object resource = this.SceneViewModel.FindResource(defaultStyleKey);
                if (resource == null)
                {
                    return;
                }
                if (projectContext1 != null && projectContext1.IsCapabilitySet(PlatformCapability.VsmInToolkit) && (projectContext1.IsCapabilitySet(PlatformCapability.SupportsVisualStateManager) && projectContext1.PlatformMetadata.IsNullType((ITypeId)projectContext1.ResolveType(ProjectNeutralTypes.VisualStateManager))))
                {
                    IAssembly usingAssemblyName = projectContext1.Platform.Metadata.GetPlatformAssemblyUsingAssemblyName(targetElement.Type.RuntimeAssembly);
                    if (usingAssemblyName == null || !AssemblyHelper.IsPlatformAssembly(usingAssemblyName))
                    {
                        IDocumentContext documentContext = (IDocumentContext) new DocumentContext((IProjectContext) new ToolkitProjectContext(projectContext1), ((DocumentContext)this.SceneViewModel.Document.DocumentContext).DocumentLocator);
                        DocumentNode     node            = documentContext.CreateNode(resource.GetType(), resource);
                        if (ProjectAttributeHelper.GetDefaultStateRecords(this.Type, (ITypeResolver)(documentContext.TypeResolver as ProjectContext)).Count > 0 || (DocumentCompositeNode)node.FindFirst(new Predicate <DocumentNode>(this.SelectVisualStateGroupPredicate)) != null)
                        {
                            ToolkitHelper.AddToolkitReferenceIfNeeded((ITypeResolver)projectContext1, this.DesignerContext.ViewUpdateManager);
                        }
                    }
                }
                SceneNode sceneNode = this.SceneViewModel.CreateSceneNode(resource);
                if (!PlatformTypes.Style.IsAssignableFrom((ITypeId)sceneNode.Type))
                {
                    return;
                }
                currentStyle = sceneNode.DocumentNode;
            }
        }