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));
        }