private DocumentCompositeNode GetResourceNode(RegroupToResourceCommand.ConvertibleBrushReference brushReference) { ResourceItem resourceItem = this.FindResourceItem(brushReference); if (resourceItem != null) { return((DocumentCompositeNode)resourceItem.DocumentNode); } ResourceContainer resourceContainer = this.designerContext.ResourceManager.FindResourceContainer(brushReference.DocumentUrl); resourceContainer.EnsureEditable(); CreateResourceModel createResourceModel = new CreateResourceModel(resourceContainer.ViewModel, resourceContainer.ViewModel.DesignerContext.ResourceManager, typeof(DrawingBrush), (Type)null, (string)null, (SceneElement)null, (SceneNode)null, CreateResourceModel.ContextFlags.None); createResourceModel.SelectedLocation = (object)resourceContainer.ViewModel.Document; createResourceModel.KeyString = brushReference.Key; DocumentCompositeNode documentCompositeNode = (DocumentCompositeNode)null; createResourceModel.SelectedExternalResourceDictionaryFile = resourceContainer; using (SceneEditTransaction editTransaction = resourceContainer.ViewModel.CreateEditTransaction(StringTable.CreateResourceDialogTitle)) { documentCompositeNode = resourceContainer.ViewModel.Document.DocumentContext.CreateNode(typeof(DrawingBrush)); documentCompositeNode = createResourceModel.CreateResource((DocumentNode)documentCompositeNode, (IPropertyId)null, -1); editTransaction.Commit(); } return(documentCompositeNode); }
public override void Execute() { SceneElement closestValidCanvas = this.FindClosestValidCanvas(this.designerContext.SelectionManager.ElementSelectionSet.Selection); if (closestValidCanvas == null) { return; } RegroupToResourceCommand.ConvertibleBrushReference brushReference = new RegroupToResourceCommand.ConvertibleBrushReference(closestValidCanvas); ResourceContainer resourceContainer = this.designerContext.ResourceManager.FindResourceContainer(brushReference.DocumentUrl); using (SceneEditTransaction editTransaction1 = this.designerContext.ActiveSceneViewModel.CreateEditTransaction(this.UndoUnitString)) { using (SceneEditTransaction editTransaction2 = resourceContainer.ViewModel.CreateEditTransaction(this.UndoUnitString)) { DocumentCompositeNode resourceNode = this.GetResourceNode(brushReference); DocumentNode documentNode = resourceNode.Properties[DictionaryEntryNode.ValueProperty]; this.designerContext.SelectionManager.ElementSelectionSet.SetSelection(closestValidCanvas); if (!typeof(DrawingBrush).IsAssignableFrom(documentNode.TargetType)) { throw new NotSupportedException("Regroup to resource not enabled on non-DrawingBrush types."); } new RegroupToResourceCommand.ReplaceDrawingBrushCommand(this.designerContext.ActiveSceneViewModel, resourceNode).Execute(); this.PostProcess(closestValidCanvas); editTransaction2.Commit(); editTransaction1.Commit(); } } }
private bool CanUseBrushReference(RegroupToResourceCommand.ConvertibleBrushReference brushReference) { if (!brushReference.HasReferenceInfo) { return(false); } ResourceEntryItem resourceEntryItem = this.FindResourceItem(brushReference) as ResourceEntryItem; if (resourceEntryItem != null) { return(RegroupToResourceCommand.IsTypeSupported(resourceEntryItem.Resource.ValueNode.TargetType)); } return(this.designerContext.ResourceManager.FindResourceContainer(brushReference.DocumentUrl) != null); }
private ResourceItem FindResourceItem(RegroupToResourceCommand.ConvertibleBrushReference brushReference) { ResourceContainer resourceContainer = this.designerContext.ResourceManager.FindResourceContainer(brushReference.DocumentUrl); if (resourceContainer != null) { foreach (ResourceItem resourceItem in (Collection <ResourceItem>)resourceContainer.ResourceItems) { ResourceEntryItem resourceEntryItem = resourceItem as ResourceEntryItem; if (resourceEntryItem != null && DocumentPrimitiveNode.GetValueAsString(resourceEntryItem.Resource.KeyNode) == brushReference.Key) { return((ResourceItem)resourceEntryItem); } } } return((ResourceItem)null); }