diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
index b09a84e857..18c7d26a06 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
@@ -26,14 +26,12 @@ namespace ICSharpCode.WpfDesign.Designer
}
}
- DefaultServiceProvider _services;
+ DesignContext _context;
InnerDesignPanel _innerDesignPanel;
UIElement _designedElement;
- public DesignPanel(DefaultServiceProvider services)
+ public DesignPanel()
{
- this._services = services;
-
this.Focusable = true;
_innerDesignPanel = new InnerDesignPanel();
@@ -50,6 +48,19 @@ namespace ICSharpCode.WpfDesign.Designer
}
}
+ ///
+ /// Gets/Sets the design context.
+ ///
+ public DesignContext Context {
+ get { return _context; }
+ set { _context = value; }
+ }
+
+ private IToolService ToolService {
+ [DebuggerStepThrough]
+ get { return _context.Services.Tool; }
+ }
+
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
return new PointHitTestResult(this, hitTestParameters.HitPoint);
@@ -69,7 +80,7 @@ namespace ICSharpCode.WpfDesign.Designer
if (site != null) {
Debug.WriteLine(" Found designed element: " + site.Component.GetType().Name);
}
- _services.Tool.CurrentTool.OnMouseDown(this, e);
+ ToolService.CurrentTool.OnMouseDown(this, e);
}
}
@@ -77,7 +88,7 @@ namespace ICSharpCode.WpfDesign.Designer
{
if (originalSource == null)
return null;
- DesignItem site = _services.Component.GetDesignItem(originalSource);
+ DesignItem site = _context.Services.Component.GetDesignItem(originalSource);
if (site != null)
return site;
if (originalSource == _innerDesignPanel)
@@ -104,16 +115,6 @@ namespace ICSharpCode.WpfDesign.Designer
}
}
- #region IDesignPanel implementation
- public UIElement DesignPanelUI {
- get { return this; }
- }
-
- public DefaultServiceProvider Services {
- get { return _services; }
- }
- #endregion
-
bool _isInInputAction;
void IDesignPanel.StartInputAction()
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
index c65615cdad..93f9526470 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignSurface.cs
@@ -11,7 +11,6 @@ using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Markup;
using System.Xml;
-using ICSharpCode.WpfDesign.XamlDom;
using ICSharpCode.WpfDesign.Designer.Services;
using ICSharpCode.WpfDesign.Designer.Controls;
@@ -22,36 +21,26 @@ namespace ICSharpCode.WpfDesign.Designer
///
public sealed class DesignSurface : SingleVisualChildElement
{
- readonly DefaultServiceProvider _services;
- readonly DefaultComponentService _componentService;
readonly ScrollViewer _scrollViewer;
readonly DesignPanel _designPanel;
+ DesignContext _designContext;
///
/// Create a new DesignSurface instance.
///
public DesignSurface()
{
- DesignServiceContainer serviceContainer = new DesignServiceContainer();
- _services = new DefaultServiceProvider(serviceContainer);
-
- serviceContainer.AddService(typeof(IVisualDesignService), new DefaultVisualDesignService());
- serviceContainer.AddService(typeof(ISelectionService), new DefaultSelectionService());
- serviceContainer.AddService(typeof(IToolService), new DefaultToolService());
- _componentService = new DefaultComponentService(this);
- serviceContainer.AddService(typeof(IComponentService), _componentService);
-
_scrollViewer = new ScrollViewer();
- _designPanel = new DesignPanel(_services);
+ _designPanel = new DesignPanel();
_scrollViewer.Content = _designPanel;
this.VisualChild = _scrollViewer;
}
///
- /// Gets the service provider.
+ /// Gets the active design context.
///
- public DefaultServiceProvider Services {
- get { return _services; }
+ public DesignContext DesignContext {
+ get { return _designContext; }
}
///
@@ -69,7 +58,7 @@ namespace ICSharpCode.WpfDesign.Designer
public void LoadDesigner(XmlReader xamlReader)
{
UnloadDesigner();
- InitializeDesigner(XamlParser.Parse(xamlReader));
+ InitializeDesigner(new Xaml.XamlDesignContext(XamlDom.XamlParser.Parse(xamlReader)));
}
///
@@ -77,18 +66,14 @@ namespace ICSharpCode.WpfDesign.Designer
///
public void SaveDesigner(XmlWriter writer)
{
- _currentDocument.Save(writer);
+ _designContext.Save(writer);
}
- XamlDocument _currentDocument;
-
- void InitializeDesigner(XamlDocument document)
+ void InitializeDesigner(DesignContext context)
{
- _currentDocument = document;
- XamlDesignItem rootSite = _componentService.RegisterXamlComponentRecursive(document.RootElement);
- UIElement rootUI = DefaultVisualDesignService.CreateUIElementFor(rootSite);
- rootSite.SetView(rootUI);
- _designPanel.DesignedElement = rootUI;
+ _designContext = context;
+ _designPanel.Context = context;
+ _designPanel.DesignedElement = context.RootItem.View;
}
///
@@ -96,12 +81,9 @@ namespace ICSharpCode.WpfDesign.Designer
///
public void UnloadDesigner()
{
- _currentDocument = null;
- UIElement designedElement = this.DesignedElement;
- if (designedElement != null) {
- _componentService.UnregisterAllComponents();
- _designPanel.DesignedElement = null;
- }
+ _designContext = null;
+ _designPanel.Context = null;
+ _designPanel.DesignedElement = null;
}
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/DesignServiceContainer.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/DesignServiceContainer.cs
deleted file mode 100644
index e5de6faed3..0000000000
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/DesignServiceContainer.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-//
-//
-//
-// $Revision$
-//
-
-using System;
-using System.Collections.Generic;
-
-namespace ICSharpCode.WpfDesign.Designer.Services
-{
- sealed class DesignServiceContainer : IServiceContainer
- {
- public DesignServiceContainer()
- {
- AddService(typeof(IServiceContainer), this);
- }
-
- Dictionary _services = new Dictionary();
-
- public void AddService(Type serviceInterface, object serviceInstance)
- {
- if (serviceInterface == null)
- throw new ArgumentNullException("serviceInterface");
- if (serviceInstance == null)
- throw new ArgumentNullException("serviceInstance");
-
- _services.Add(serviceInterface, serviceInstance);
- }
-
- public object GetService(Type serviceType)
- {
- object instance;
- _services.TryGetValue(serviceType, out instance);
- return instance;
- }
- }
-}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
index 904bd12b4c..454eba962f 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
@@ -61,17 +61,18 @@
-
-
-
+
+
+
+
{88DA149F-21B2-48AB-82C4-28FB6BDFD783}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ComponentService.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
similarity index 88%
rename from src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ComponentService.cs
rename to src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
index 74dd91e085..707d61d624 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ComponentService.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlComponentService.cs
@@ -9,15 +9,15 @@ using System;
using System.Collections.Generic;
using ICSharpCode.WpfDesign.XamlDom;
-namespace ICSharpCode.WpfDesign.Designer.Services
+namespace ICSharpCode.WpfDesign.Designer.Xaml
{
- sealed class DefaultComponentService : IComponentService
+ sealed class XamlComponentService : IComponentService
{
- readonly DesignSurface _surface;
+ readonly XamlDesignContext _context;
- public DefaultComponentService(DesignSurface surface)
+ public XamlComponentService(XamlDesignContext context)
{
- this._surface = surface;
+ this._context = context;
}
public event EventHandler ComponentRegistered;
@@ -71,7 +71,7 @@ namespace ICSharpCode.WpfDesign.Designer.Services
}
}
- XamlDesignItem site = new XamlDesignItem(obj, _surface);
+ XamlDesignItem site = new XamlDesignItem(obj, _context);
_sites.Add(site.Component, site);
if (ComponentRegistered != null) {
ComponentRegistered(this, new DesignItemEventArgs(site));
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignContext.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignContext.cs
new file mode 100644
index 0000000000..acb4843f58
--- /dev/null
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignContext.cs
@@ -0,0 +1,45 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using ICSharpCode.WpfDesign.XamlDom;
+using ICSharpCode.WpfDesign.Designer.Services;
+
+namespace ICSharpCode.WpfDesign.Designer.Xaml
+{
+ sealed class XamlDesignContext : DesignContext
+ {
+ readonly XamlDocument _doc;
+ readonly XamlDesignItem _rootItem;
+ readonly XamlComponentService _componentService;
+
+ public XamlDesignContext(XamlDocument doc)
+ {
+ if (doc == null)
+ throw new ArgumentNullException("doc");
+ this._doc = doc;
+
+ this.Services.AddService(typeof(IVisualDesignService), new DefaultVisualDesignService());
+ this.Services.AddService(typeof(ISelectionService), new DefaultSelectionService());
+ this.Services.AddService(typeof(IToolService), new DefaultToolService());
+
+ _componentService = new XamlComponentService(this);
+ this.Services.AddService(typeof(IComponentService), _componentService);
+
+ _rootItem = _componentService.RegisterXamlComponentRecursive(doc.RootElement);
+ }
+
+ public override void Save(System.Xml.XmlWriter writer)
+ {
+ _doc.Save(writer);
+ }
+
+ public override DesignItem RootItem {
+ get { return _rootItem; }
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/XamlDesignItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
similarity index 62%
rename from src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/XamlDesignItem.cs
rename to src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
index 1fc523be4f..be7fc80d08 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/XamlDesignItem.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlDesignItem.cs
@@ -9,23 +9,23 @@ using System;
using System.Windows;
using ICSharpCode.WpfDesign.XamlDom;
-namespace ICSharpCode.WpfDesign.Designer
+namespace ICSharpCode.WpfDesign.Designer.Xaml
{
sealed class XamlDesignItem : DesignItem
{
- readonly XamlObject xamlObject;
- readonly DesignSurface designSurface;
+ readonly XamlObject _xamlObject;
+ readonly XamlDesignContext _designContext;
UIElement _view;
- public XamlDesignItem(XamlObject xamlObject, DesignSurface designSurface)
+ public XamlDesignItem(XamlObject xamlObject, XamlDesignContext designContext)
{
- this.xamlObject = xamlObject;
- this.designSurface = designSurface;
+ this._xamlObject = xamlObject;
+ this._designContext = designContext;
}
public override object Component {
get {
- return xamlObject.Instance;
+ return _xamlObject.Instance;
}
}
@@ -43,9 +43,8 @@ namespace ICSharpCode.WpfDesign.Designer
_view = newView;
}
- public override object GetService(Type serviceType)
- {
- return designSurface.Services.GetService(serviceType);
+ public override DesignContext Context {
+ get { return _designContext; }
}
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignContext.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignContext.cs
new file mode 100644
index 0000000000..7d5a495982
--- /dev/null
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignContext.cs
@@ -0,0 +1,41 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+using System.Diagnostics;
+using System.Xml;
+
+namespace ICSharpCode.WpfDesign
+{
+ ///
+ /// The context that the designer uses.
+ ///
+ public abstract class DesignContext
+ {
+ readonly ServiceContainer _services = new ServiceContainer();
+
+ ///
+ /// Gets the .
+ ///
+ public ServiceContainer Services {
+ [DebuggerStepThrough]
+ get { return _services; }
+ }
+
+ ///
+ /// Gets the root design item.
+ ///
+ public abstract DesignItem RootItem {
+ get;
+ }
+
+ ///
+ /// Save the designed elements as XML.
+ ///
+ public abstract void Save(XmlWriter writer);
+ }
+}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs
index ff836866d3..326f2c5f3d 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItem.cs
@@ -7,6 +7,7 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Windows;
namespace ICSharpCode.WpfDesign
@@ -20,7 +21,7 @@ namespace ICSharpCode.WpfDesign
/// http://blogs.msdn.com/jnak/archive/2006/04/24/580393.aspx
/// http://blogs.msdn.com/jnak/archive/2006/08/04/687166.aspx
///
- public abstract class DesignItem : IServiceProvider
+ public abstract class DesignItem
{
///
/// Gets the component this DesignSite was created for.
@@ -32,23 +33,17 @@ namespace ICSharpCode.WpfDesign
///
public abstract UIElement View { get; }
- DefaultServiceProvider _defaultServiceProvider;
-
///
- /// Gets an instance that provides convenience properties for the most-used designers.
+ /// Gets the design context.
///
- public DefaultServiceProvider Services {
- get {
- if (_defaultServiceProvider == null) {
- _defaultServiceProvider = new DefaultServiceProvider(this);
- }
- return _defaultServiceProvider;
- }
- }
+ public abstract DesignContext Context { get; }
///
- /// Gets the service with the specified type.
+ /// Gets an instance that provides convenience properties for the most-used designers.
///
- public abstract object GetService(Type serviceType);
+ public ServiceContainer Services {
+ [DebuggerStepThrough]
+ get { return this.Context.Services; }
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Extensions/Extension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Extensions/Extension.cs
new file mode 100644
index 0000000000..45ab7340c1
--- /dev/null
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Extensions/Extension.cs
@@ -0,0 +1,18 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+
+namespace ICSharpCode.WpfDesign.Extensions
+{
+ ///
+ /// Base class for all Extensions.
+ ///
+ public abstract class Extension
+ {
+ }
+}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DefaultServiceProvider.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/ServiceContainer.cs
similarity index 60%
rename from src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DefaultServiceProvider.cs
rename to src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/ServiceContainer.cs
index e5a41e34a2..49288c4cd9 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DefaultServiceProvider.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/ServiceContainer.cs
@@ -6,24 +6,37 @@
//
using System;
+using System.Collections.Generic;
using System.ComponentModel;
namespace ICSharpCode.WpfDesign
{
///
- /// Provides convenience methods for well-known service instances.
+ /// The is a built-in service that manages the list of services.
+ /// You can only add services to it, removing or replacing services is not supported because
+ /// many designers depend on keeping their services available.
///
- public sealed class DefaultServiceProvider : IServiceProvider
+ public sealed class ServiceContainer : IServiceProvider
{
- readonly IServiceProvider _serviceProvider;
+ Dictionary _services = new Dictionary();
///
- /// Creates a new DefaultServiceProvider that requests services from the specified service
- /// provider.
+ /// Adds a new service to the container.
///
- public DefaultServiceProvider(IServiceProvider serviceProvider)
+ ///
+ /// The type of the service interface to use as a key for the service.
+ ///
+ ///
+ /// The service instance implementing that interface.
+ ///
+ public void AddService(Type serviceInterface, object serviceInstance)
{
- this._serviceProvider = serviceProvider;
+ if (serviceInterface == null)
+ throw new ArgumentNullException("serviceInterface");
+ if (serviceInstance == null)
+ throw new ArgumentNullException("serviceInstance");
+
+ _services.Add(serviceInterface, serviceInstance);
}
///
@@ -31,7 +44,9 @@ namespace ICSharpCode.WpfDesign
///
public object GetService(Type serviceType)
{
- return _serviceProvider.GetService(serviceType);
+ object instance;
+ _services.TryGetValue(serviceType, out instance);
+ return instance;
}
///
@@ -40,28 +55,18 @@ namespace ICSharpCode.WpfDesign
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter")]
public T GetService() where T : class
{
- return (T)_serviceProvider.GetService(typeof(T));
+ return (T)GetService(typeof(T));
}
T GetServiceChecked() where T : class
{
- T service = (T)_serviceProvider.GetService(typeof(T));
+ T service = (T)GetService(typeof(T));
if (service == null) {
throw new DesignerException("Could not find guaranteed service " + typeof(T).FullName);
}
return service;
}
- ///
- /// Gets the .
- /// This service is guaranteed to always exist -> this property will never return null.
- ///
- public IServiceContainer ServiceContainer {
- get {
- return GetServiceChecked();
- }
- }
-
///
/// Gets the .
/// This service is guaranteed to always exist -> this property will never return null.
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Services.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Services.cs
index 8e0bb0e98a..c6f916327f 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Services.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Services.cs
@@ -11,27 +11,6 @@ using System.Windows;
namespace ICSharpCode.WpfDesign
{
- #region IServiceContainer
- ///
- /// The is a built-in service that manages the list of services.
- /// You can only add services to it, removing or replacing services is not supported because
- /// many designers depend on keeping their services available.
- ///
- public interface IServiceContainer : IServiceProvider
- {
- ///
- /// Adds a new service to the container.
- ///
- ///
- /// The type of the service interface to use as a key for the service.
- ///
- ///
- /// The service instance implementing that interface.
- ///
- void AddService(Type serviceInterface, object serviceInstance);
- }
- #endregion
-
#region IVisualDesignService
///
/// A service that can visualize non-UIElement objects on a design surface.
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
index 5d6751abcf..f0f6da193f 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
@@ -87,9 +87,9 @@ namespace ICSharpCode.WpfDesign
public interface IDesignPanel : IInputElement
{
///
- /// Gets the service provider used by the DesignPanel.
+ /// Gets the design context used by the DesignPanel.
///
- DefaultServiceProvider Services { get; }
+ DesignContext Context { get; }
///
/// Starts an input action. This prevents components and tools from getting input events,
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj
index 0b2e03eb67..8bacd284b6 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj
@@ -55,15 +55,18 @@
Configuration\GlobalAssemblyInfo.cs
+
-
+
+
+
\ No newline at end of file