private SceneElement PreparePresenter(DocumentCompositeNode visualTreeNode, SceneElement presenterElement) { if (presenterElement.Type.Equals((object)PlatformTypes.ContentPresenter)) { ContentPresenterElement.PrepareContentPresenter((ContentPresenterElement)presenterElement); } else if (presenterElement.Type.Equals((object)PlatformTypes.ItemsPresenter) && presenterElement.Parent == null) { ContentControlElement contentControlElement = (ContentControlElement)presenterElement.ViewModel.CreateSceneNode(PlatformTypes.ScrollViewer); if (!presenterElement.ViewModel.ProjectContext.IsCapabilitySet(PlatformCapability.IsWpf)) { DocumentNode first = visualTreeNode.FindFirst((Predicate <DocumentNode>)(node => { if (node.Name != null) { return(node.Name.Equals(PlatformTypes.ScrollViewer.Name)); } return(false); })); if (first != null) { presenterElement.ViewModel.GetSceneNode(first).Name = (string)null; } contentControlElement.Name = PlatformTypes.ScrollViewer.Name; } contentControlElement.DefaultInsertionPoint.Insert((SceneNode)presenterElement); return((SceneElement)contentControlElement); } return(presenterElement); }
private static MoveStrategy CreateForLayoutMode(MoveStrategyContext context, SceneElement hitElement) { SceneElement sceneElement = hitElement; while (sceneElement != null) { BaseFrameworkElement frameworkElement = sceneElement as BaseFrameworkElement; if (frameworkElement != null && context.RootNode.IsAncestorOf((SceneNode)frameworkElement)) { if (!MoveStrategyFactory.CanMoveInside(context, frameworkElement)) { sceneElement = frameworkElement.ParentElement; continue; } MoveStrategy byParentType = MoveStrategyFactory.CreateByParentType(context, frameworkElement); if (byParentType != null) { bool flag = false; ItemsControlElement itemsControlElement = frameworkElement.ParentElement as ItemsControlElement; ContentControlElement contentControlElement = frameworkElement as ContentControlElement; if (itemsControlElement != null && contentControlElement != null && (ItemsControlElement.ItemsProperty.Equals((object)itemsControlElement.GetPropertyForChild((SceneNode)frameworkElement)) && (itemsControlElement.ViewObject as IViewItemsControl).IsItemItsOwnContainer(contentControlElement.ViewObject))) { flag = true; } if (!flag) { IProperty contentProperty = MoveStrategyFactory.GetContentProperty(context, (SceneNode)frameworkElement); int childrenForElement = MoveStrategy.GetMaxChildrenForElement((SceneElement)frameworkElement, contentProperty); if (context.DraggedElements.Count <= childrenForElement && (childrenForElement != 1 || context.DraggedElements.Count != 1 || (!frameworkElement.IsAncestorOf((SceneNode)context.DraggedElements[0]) || context.DraggedElements[0].Parent == frameworkElement))) { byParentType.LayoutContainer = frameworkElement; return(byParentType); } } } } if (sceneElement != context.RootNode) { sceneElement = sceneElement.ParentElement; } else { break; } } return((MoveStrategy)null); }
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(); } }