public static DocumentCompositeNode CreateDataTemplateResource(SceneNode targetElement, IPropertyId templateProperty, string resourceNameBase, IList <DataSchemaNodePath> entries, DataViewCategory category, ITypeId dataTemplateType) { SceneViewModel viewModel = targetElement.ViewModel; IPlatform platform = targetElement.Platform; IDocumentContext documentContext = viewModel.Document.DocumentContext; DocumentCompositeNode documentCompositeNode = DataViewFactory.GenerateDataView(platform, documentContext, entries, category); if (documentCompositeNode == null) { return((DocumentCompositeNode)null); } DocumentCompositeNode node = documentContext.CreateNode(dataTemplateType); node.Properties[(IPropertyId)node.Type.Metadata.DefaultContentProperty] = (DocumentNode)documentCompositeNode; CreateResourceModel createResourceModel = new CreateResourceModel(viewModel, viewModel.DesignerContext.ResourceManager, node.Type.RuntimeType, (Type)null, (string)null, (SceneElement)null, (SceneNode)null, CreateResourceModel.ContextFlags.None); createResourceModel.KeyString = resourceNameBase; bool useStaticResource = !JoltHelper.TypeSupported((ITypeResolver)viewModel.ProjectContext, PlatformTypes.DynamicResource); if (!useStaticResource && !PlatformTypes.FrameworkElement.IsAssignableFrom((ITypeId)targetElement.Type)) { useStaticResource = true; } int index = useStaticResource ? createResourceModel.IndexInResourceSite(targetElement.DocumentNode) : -1; DocumentCompositeNode resource = createResourceModel.CreateResource((DocumentNode)node, (IPropertyId)null, index); if (templateProperty != null) { DocumentNode resourceReference = createResourceModel.CreateResourceReference(documentContext, resource, useStaticResource); using (viewModel.AnimationEditor.DeferKeyFraming()) targetElement.SetValue(templateProperty, (object)resourceReference); } return((DocumentCompositeNode)resource.Properties[DictionaryEntryNode.ValueProperty]); }
private bool CreateControls(Point dropPoint) { using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitDragDropCreateDataboundControl)) { DataContextInfo dataContextInfo = new DataContextEvaluator().Evaluate(this.DragModel.TargetNode); DataSourceInfo other = new DataSourceInfo(new DataSchemaNodePath(this.DragModel.DataSource.PrimaryAbsoluteSchema, this.GetRelativeSchema().Root)); bool flag = false; if (dataContextInfo.DataSource == null || !dataContextInfo.DataSource.IsValidWithSource || dataContextInfo.DataSource.CompareSources(other) != DataSourceMatchCriteria.Exact) { flag = true; } IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths(); CanvasLikeDataViewLayoutBuilder viewLayoutBuilder = new CanvasLikeDataViewLayoutBuilder(this.DragModel.InsertionPoint.InsertIndex, false); DocumentCompositeNode containerNode = (DocumentCompositeNode)this.DragModel.TargetNode.DocumentNode; DataViewFactory.GenerateDataView(this.DragModel.Platform, this.DragModel.DocumentContext, relativeSchemaPaths, DataViewCategory.Master, containerNode, (IDataViewLayoutBuilder)viewLayoutBuilder); if (flag) { viewLayoutBuilder.RebindFields(this.DragModel.ViewModel, this.DragModel.DataSource.PrimaryAbsoluteSchema, relativeSchemaPaths); } editTransaction.Update(); viewLayoutBuilder.ApplyActiveUserThemeStyle(this.DragModel.ViewModel); viewLayoutBuilder.CompleteLayout(this.DragModel.ViewModel, dropPoint); viewLayoutBuilder.SelectElements(this.DragModel.ViewModel); editTransaction.Commit(); } return(true); }
private bool CreateDetailsVisualization(Point dropPoint) { using (SceneEditTransaction editTransaction = this.DragModel.Document.CreateEditTransaction(StringTable.UndoUnitDragDropCreateDataboundControl)) { bool flag = true; DocumentCompositeNode containerNode = (DocumentCompositeNode)null; BaseFrameworkElement child = this.GetReusableDetailsContainer(true, this.DragModel.CheckDropFlags(DataBindingDragDropFlags.SetBinding)); if (child != null) { containerNode = (DocumentCompositeNode)child.DocumentNode; flag = false; } IList <DataSchemaNodePath> relativeSchemaPaths = this.GetRelativeSchemaPaths(); bool shouldCreateLabels = true; if (relativeSchemaPaths.Count == 1 && this.DragModel.DataSource.Count == 1 && relativeSchemaPaths[0].Node == this.DragModel.DataSource.PrimarySchemaNodePath.Node) { shouldCreateLabels = false; } CanvasLikeDataViewLayoutBuilder viewLayoutBuilder = new CanvasLikeDataViewLayoutBuilder(this.DragModel.InsertionPoint.InsertIndex, shouldCreateLabels); DocumentCompositeNode documentCompositeNode = DataViewFactory.GenerateDataView(this.DragModel.Platform, this.DragModel.DocumentContext, relativeSchemaPaths, DataViewCategory.Details, containerNode, (IDataViewLayoutBuilder)viewLayoutBuilder); if (flag) { this.DragModel.ViewModel.ElementSelectionSet.Clear(); child = (BaseFrameworkElement)this.DragModel.ViewModel.GetSceneNode((DocumentNode)documentCompositeNode); this.DragModel.InsertionPoint.Insert((SceneNode)child); this.DragModel.ViewModel.BindingEditor.CreateAndSetBindingOrData((SceneNode)child, DesignTimeProperties.DesignDataContextProperty, this.DragModel.DetailsContainerSchemaPath); } editTransaction.Update(); viewLayoutBuilder.ApplyActiveUserThemeStyle(this.DragModel.ViewModel); if (flag) { Size size = viewLayoutBuilder.CalcCombinedSize(this.DragModel.ViewModel); Rect rect = new Rect(dropPoint, new Size() { Width = Math.Max(size.Width, 200.0), Height = Math.Max(size.Height, 200.0) }); this.DragModel.ViewModel.GetLayoutDesignerForChild((SceneElement)child, true).SetChildRect(child, rect); editTransaction.Update(); this.DragModel.ViewModel.ElementSelectionSet.SetSelection((SceneElement)child); dropPoint = new Point(); } viewLayoutBuilder.CompleteLayout(this.DragModel.ViewModel, dropPoint); if (!flag) { viewLayoutBuilder.SelectElements(this.DragModel.ViewModel); } this.LinkDetailsWithMasterControl((SceneElement)child); editTransaction.Commit(); } return(true); }
public static DocumentCompositeNode GenerateDataView(IPlatform platform, IDocumentContext documentContext, IList <DataSchemaNodePath> entries, DataViewCategory category) { return(DataViewFactory.GenerateDataView(platform, documentContext, entries, category, (DocumentCompositeNode)null, (IDataViewLayoutBuilder)null)); }