public bool Resolve(IDocumentContext documentContext, EditDesignTimeResourceModelMode mode, string missingResourceName) { if (documentContext == null) { throw new ArgumentNullException("documentContext"); } bool success = false; UIThreadDispatcherHelper.Invoke(DispatcherPriority.ApplicationIdle, (Action)(() => { EditDesignTimeResourceModel model = this.CreateModel(documentContext, mode, missingResourceName); if (model == null || !model.CanResolveDesignTimeResources) { return; } if (mode != EditDesignTimeResourceModelMode.Manual) { bool?doNotAskAgain = model.DoNotAskAgain; if ((doNotAskAgain.GetValueOrDefault() ? 0 : (doNotAskAgain.HasValue ? true : false)) == 0) { return; } } bool?nullable = new EditDesignTimeResourcesDialog(model).ShowDialog(); success = nullable.GetValueOrDefault() && nullable.HasValue; })); return(success); }
public EditDesignTimeResourceModel(IProject rootProject, DesignerContext context, string fileName, EditDesignTimeResourceModelMode mode = EditDesignTimeResourceModelMode.Warning, string missingResourceName = null) { EditDesignTimeResourceModel timeResourceModel = this; if (rootProject == null) { throw new ArgumentNullException("rootProject"); } if (context == null) { throw new ArgumentNullException("context"); } this.mode = mode; this.rootProject = rootProject; this.context = context; this.fileName = fileName; this.missingResourceName = missingResourceName; IProjectManager service = this.context.Services.GetService <IProjectManager>(); if (service != null) { ISolution currentSolution = service.CurrentSolution; if (currentSolution != null) { this.solutionSettingsManager = currentSolution.SolutionSettingsManager; } } this.targetPath = Path.Combine(rootProject.ProjectRoot.Path, rootProject.PropertiesPath); foreach (DocumentResourceContainer container in Enumerable.Select(Enumerable.ThenBy(Enumerable.OrderBy(Enumerable.Where(Enumerable.Select(Enumerable.Distinct <DocumentResourceContainer>((IEnumerable <DocumentResourceContainer>)context.ResourceManager.DocumentResourceContainers), container => new { container = container, doc = container.Document.XamlDocument }), param0 => { if (param0.container.Document.ProjectDocumentType == ProjectDocumentType.ResourceDictionary && !param0.container.ProjectItem.ContainsDesignTimeResources && param0.doc != null) { return(param0.doc.IsEditable); } return(false); }), param0 => param0.container.ProjectItem.Project.Name), param0 => param0.container.Name), param0 => param0.container)) { this.designTimeResourceContainers.Add(new DesignTimeResourceContainer(container)); } this.designTimeResources = Enumerable.FirstOrDefault <IProjectItem>((IEnumerable <IProjectItem>)rootProject.Items, (Func <IProjectItem, bool>)(item => { bool flag = Enumerable.Any <IProject>(rootProject.ReferencedProjects, (Func <IProject, bool>)(p => p.DocumentReference.GetHashCode() == item.DocumentReference.GetHashCode())); if (item.ContainsDesignTimeResources) { return(!flag); } return(false); })); if (this.designTimeResources == null) { return; } DocumentResourceContainer resourceContainer1 = Enumerable.FirstOrDefault <DocumentResourceContainer>((IEnumerable <DocumentResourceContainer>)context.ResourceManager.DocumentResourceContainers, (Func <DocumentResourceContainer, bool>)(container => container.ProjectItem == this.designTimeResources)); if (resourceContainer1 == null) { return; } List <ResourceDictionaryItem> list = new List <ResourceDictionaryItem>(); context.ResourceManager.FindAllReachableDictionaries((ResourceContainer)resourceContainer1, (ICollection <ResourceDictionaryItem>)list); foreach (ResourceDictionaryItem resourceDictionaryItem in list) { DocumentResourceContainer container = context.ResourceManager.FindResourceContainer(resourceDictionaryItem.DesignTimeSource) as DocumentResourceContainer; if (container != null) { DesignTimeResourceContainer resourceContainer2 = Enumerable.FirstOrDefault <DesignTimeResourceContainer>((IEnumerable <DesignTimeResourceContainer>) this.designTimeResourceContainers, (Func <DesignTimeResourceContainer, bool>)(c => c.Container == container)); if (resourceContainer2 != null) { this.designTimeResourceContainers.Remove(resourceContainer2); } } } }
private EditDesignTimeResourceModel CreateModel(IDocumentContext documentContext, EditDesignTimeResourceModelMode mode, string missingResourceName) { IProject rootProject = (IProject)null; if (documentContext.ApplicationRoot != null) { rootProject = this.designerContext.ProjectManager.CurrentSolution.FindProjectContainingItem(DocumentReference.Create(documentContext.ApplicationRoot.DocumentContext.DocumentUrl)); } if (rootProject == null) { rootProject = this.designerContext.ProjectManager.CurrentSolution.FindProjectContainingItem(DocumentReference.Create(documentContext.DocumentUrl)); } if (rootProject == null) { return((EditDesignTimeResourceModel)null); } return(new EditDesignTimeResourceModel(rootProject, this.designerContext, Path.GetFileName(documentContext.DocumentUrl), mode, missingResourceName)); }