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(); } }
/// <summary> Throws ItemNotFoundException if node is not found. </summary> public HtmlNode FindFirst(string cssSelector) => DocumentNode.FindFirst(cssSelector);
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; } }