diff --git a/samples/XamlDesigner/Document.cs b/samples/XamlDesigner/Document.cs index 95d1580700..21a28e35e5 100644 --- a/samples/XamlDesigner/Document.cs +++ b/samples/XamlDesigner/Document.cs @@ -206,7 +206,14 @@ namespace ICSharpCode.XamlDesigner { OutlineRoot = null; using (var xmlReader = XmlReader.Create(new StringReader(Text))) { - DesignSurface.LoadDesigner(xmlReader, null); + XamlLoadSettings settings = new XamlLoadSettings(); + foreach (var assNode in Toolbox.Instance.AssemblyNodes) + { + settings.DesignerAssemblies.Add(assNode.Assembly); + } + settings.TypeFinder = MyTypeFinder.Instance; + + DesignSurface.LoadDesigner(xmlReader, settings); } if (DesignContext.RootItem != null) { OutlineRoot = OutlineNode.Create(DesignContext.RootItem); diff --git a/samples/XamlDesigner/MyTypeFinder.cs b/samples/XamlDesigner/MyTypeFinder.cs new file mode 100644 index 0000000000..6f529d4514 --- /dev/null +++ b/samples/XamlDesigner/MyTypeFinder.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; +using System.Text; +using ICSharpCode.WpfDesign.XamlDom; + +namespace ICSharpCode.XamlDesigner +{ + public class MyTypeFinder : XamlTypeFinder + { + public override Assembly LoadAssembly(string name) + { + foreach (var assemblyNode in Toolbox.Instance.AssemblyNodes) + { + if (assemblyNode.Name == name) + return assemblyNode.Assembly; + } + + return null; + } + + public override XamlTypeFinder Clone() + { + return _instance; + } + + private static object lockObj = new object(); + + private static MyTypeFinder _instance; + public static MyTypeFinder Instance + { + get + { + lock (lockObj) + { + if (_instance == null) + { + _instance = new MyTypeFinder(); + _instance.ImportFrom(CreateWpfTypeFinder()); + } + } + + return _instance; + } + } + } +} diff --git a/samples/XamlDesigner/Toolbox.cs b/samples/XamlDesigner/Toolbox.cs index f66fae9ecf..d4880827a7 100644 --- a/samples/XamlDesigner/Toolbox.cs +++ b/samples/XamlDesigner/Toolbox.cs @@ -31,6 +31,8 @@ namespace ICSharpCode.XamlDesigner { var assembly = Assembly.LoadFile(path); + MyTypeFinder.Instance.RegisterAssembly(assembly); + var node = new AssemblyNode(); node.Assembly = assembly; node.Path = path; diff --git a/samples/XamlDesigner/XamlDesigner.csproj b/samples/XamlDesigner/XamlDesigner.csproj index 3ccebb1cb4..8448d81cbf 100644 --- a/samples/XamlDesigner/XamlDesigner.csproj +++ b/samples/XamlDesigner/XamlDesigner.csproj @@ -129,6 +129,7 @@ + MainWindow.xaml