Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit f69918c

Browse files
Merge pull request #755 from jogibear9988/master
Better WPF Designer support
2 parents a22f10b + 507b689 commit f69918c

File tree

2 files changed

+43
-32
lines changed

2 files changed

+43
-32
lines changed

src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
using ICSharpCode.NRefactory.TypeSystem;
3737
using ICSharpCode.SharpDevelop;
3838
using ICSharpCode.SharpDevelop.Designer;
39-
using ICSharpCode.SharpDevelop.Dom;
40-
using ICSharpCode.SharpDevelop.Editor;
4139
using ICSharpCode.SharpDevelop.Gui;
4240
using ICSharpCode.SharpDevelop.Parser;
4341
using ICSharpCode.SharpDevelop.Project;
@@ -48,7 +46,6 @@
4846
using ICSharpCode.WpfDesign.Designer.PropertyGrid;
4947
using ICSharpCode.WpfDesign.Designer.Services;
5048
using ICSharpCode.WpfDesign.Designer.Xaml;
51-
using ICSharpCode.WpfDesign.XamlDom;
5249
using ICSharpCode.WpfDesign.AddIn.Options;
5350

5451
namespace ICSharpCode.WpfDesign.AddIn
@@ -125,7 +122,48 @@ protected override void LoadInternal(OpenedFile file, System.IO.Stream stream)
125122
context.Services.AddService(typeof(ChooseClassServiceBase), new IdeChooseClassService());
126123
});
127124
settings.TypeFinder = MyTypeFinder.Create(this.PrimaryFile);
128-
try {
125+
settings.CurrentProjectAssemblyName = SD.ProjectService.CurrentProject.AssemblyName;
126+
127+
try
128+
{
129+
if (WpfEditorOptions.EnableAppXamlParsing)
130+
{
131+
var appXaml = SD.ProjectService.CurrentProject.Items.FirstOrDefault(x => x.FileName.GetFileName().ToLower() == ("app.xaml"));
132+
if (appXaml != null)
133+
{
134+
var f = appXaml as FileProjectItem;
135+
OpenedFile a = SD.FileService.GetOrCreateOpenedFile(f.FileName);
136+
137+
var xml = XmlReader.Create(a.OpenRead());
138+
var doc = new XmlDocument();
139+
doc.Load(xml);
140+
var node = doc.FirstChild.ChildNodes.Cast<XmlNode>().FirstOrDefault(x => x.Name == "Application.Resources");
141+
142+
foreach (XmlAttribute att in doc.FirstChild.Attributes.Cast<XmlAttribute>().ToList())
143+
{
144+
if (att.Name.StartsWith("xmlns")) {
145+
foreach (var childNode in node.ChildNodes.OfType<XmlNode>()) {
146+
childNode.Attributes.Append(att);
147+
}
148+
}
149+
}
150+
151+
var appXamlXml = XmlReader.Create(new StringReader(node.InnerXml));
152+
var appxamlContext = new XamlDesignContext(appXamlXml, settings);
153+
154+
//var parsed = XamlParser.Parse(appXamlXml, appxamlContext.ParserSettings);
155+
var dict = (ResourceDictionary) appxamlContext.RootItem.Component;// parsed.RootInstance;
156+
designer.DesignPanel.Resources.MergedDictionaries.Add(dict);
157+
}
158+
}
159+
}
160+
catch (Exception ex)
161+
{
162+
LoggingService.Error("Error in loading app.xaml", ex);
163+
}
164+
165+
try
166+
{
129167
settings.ReportErrors = UpdateTasks;
130168
designer.LoadDesigner(r, settings);
131169

@@ -154,33 +192,6 @@ protected override void LoadInternal(OpenedFile file, System.IO.Stream stream)
154192
} catch (Exception e) {
155193
this.UserContent = new WpfDocumentError(e);
156194
}
157-
158-
try{
159-
if (WpfEditorOptions.EnableAppXamlParsing) {
160-
var appXaml = SD.ProjectService.CurrentProject.Items.FirstOrDefault(x=>x.FileName.GetFileName().ToLower() == ("app.xaml"));
161-
if (appXaml!=null){
162-
var f=appXaml as FileProjectItem;
163-
OpenedFile a = SD.FileService.GetOrCreateOpenedFile(f.FileName);
164-
165-
var xml = XmlReader.Create(a.OpenRead());
166-
var doc=new XmlDocument();
167-
doc.Load(xml);
168-
var node = doc.FirstChild.ChildNodes.Cast<XmlNode>().FirstOrDefault(x=>x.Name=="Application.Resources");
169-
170-
foreach (XmlAttribute att in doc.FirstChild.Attributes.Cast<XmlAttribute>().ToList()) {
171-
if (att.Name.StartsWith("xmlns"))
172-
node.Attributes.Append(att);
173-
}
174-
175-
var appXamlXml = XmlReader.Create(new StringReader(node.InnerXml));
176-
var parsed = XamlParser.Parse(appXamlXml, ((XamlDesignContext) designer.DesignContext).ParserSettings);
177-
var dict = (ResourceDictionary)parsed.RootInstance;
178-
designer.DesignPanel.Resources.MergedDictionaries.Add(dict);
179-
}
180-
}
181-
} catch (Exception ex) {
182-
LoggingService.Error("Error in loading app.xaml", ex);
183-
}
184195
}
185196
}
186197

src/Main/Base/Project/Designer/TypeResolutionService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public Assembly LoadAssembly(string fileName)
202202
// FIX for SD2-716, remove when designer gets its own AppDomain
203203
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
204204
try {
205-
if (string.Equals(GetOriginalAssemblyFullPath(asm), fileName, StringComparison.OrdinalIgnoreCase)) {
205+
if (!asm.IsDynamic && string.Equals(GetOriginalAssemblyFullPath(asm), fileName, StringComparison.OrdinalIgnoreCase)) {
206206
RegisterAssembly(asm);
207207
return asm;
208208
}

0 commit comments

Comments
 (0)