diff --git a/samples/XamlDesigner/Document.cs b/samples/XamlDesigner/Document.cs
index 21a28e35e5..1079edf0a4 100644
--- a/samples/XamlDesigner/Document.cs
+++ b/samples/XamlDesigner/Document.cs
@@ -153,9 +153,9 @@ namespace ICSharpCode.XamlDesigner
}
}
- OutlineNode outlineRoot;
+ IOutlineNode outlineRoot;
- public OutlineNode OutlineRoot {
+ public IOutlineNode OutlineRoot {
get {
return outlineRoot;
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
index 1b41ab422d..366aa3a811 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
@@ -54,6 +54,7 @@
+
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
index 85d3229f24..344e9b5578 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/DesignPanel.cs
@@ -109,14 +109,17 @@ namespace ICSharpCode.WpfDesign.Designer
return;
}
// First try hit-testing on the adorner layer.
-
+
bool continueHitTest = true;
-
+
+ HitTestFilterCallback filterBehavior = CustomHitTestFilterBehavior ?? FilterHitTestInvisibleElements;
+ CustomHitTestFilterBehavior = null;
hitTestElements.Clear();
if (testAdorners) {
+
RunHitTest(
- _adornerLayer, mousePosition, FilterHitTestInvisibleElements,
+ _adornerLayer, mousePosition, filterBehavior,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
@@ -135,14 +138,14 @@ namespace ICSharpCode.WpfDesign.Designer
}
});
}
-
+
if (continueHitTest && testDesignSurface) {
RunHitTest(
- this.Child, mousePosition, FilterHitTestInvisibleElements,
+ this.Child, mousePosition, filterBehavior,
delegate(HitTestResult result) {
if (result != null && result.VisualHit != null && result.VisualHit is Visual) {
DesignPanelHitTestResult customResult = new DesignPanelHitTestResult((Visual)result.VisualHit);
-
+
ViewService viewService = _context.Services.View;
DependencyObject obj = result.VisualHit;
@@ -210,6 +213,8 @@ namespace ICSharpCode.WpfDesign.Designer
#region Properties
+ //Set custom HitTestFilterCallbak
+ public HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
///
/// Gets/Sets the design context.
///
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs
index da541a9cf3..43f5702af4 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/Outline.xaml.cs
@@ -40,10 +40,11 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
public static readonly DependencyProperty RootProperty =
- DependencyProperty.Register("Root", typeof(OutlineNode), typeof(Outline));
+ DependencyProperty.Register("Root", typeof(IOutlineNode), typeof(Outline));
- public OutlineNode Root {
- get { return (OutlineNode)GetValue(RootProperty); }
+ public IOutlineNode Root
+ {
+ get { return (IOutlineNode)GetValue(RootProperty); }
set { SetValue(RootProperty, value); }
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
index 844ebd0d03..261d1b47e5 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNode.cs
@@ -34,138 +34,45 @@ using ICSharpCode.WpfDesign.XamlDom;
namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
- public class OutlineNode : INotifyPropertyChanged
+ public interface IOutlineNode
{
- //Used to check if element can enter other containers
- public static PlacementType DummyPlacementType;
-
- static OutlineNode()
- {
- DummyPlacementType = PlacementType.Register("DummyPlacement");
- }
- public static OutlineNode Create(DesignItem designItem)
- {
- OutlineNode node;
- if (!outlineNodes.TryGetValue(designItem, out node)) {
- node = new OutlineNode(designItem);
- outlineNodes[designItem] = node;
- }
- return node;
- }
+ ISelectionService SelectionService { get; }
+ bool IsExpanded { get; set; }
+ DesignItem DesignItem { get; set; }
+ bool IsSelected { get; set; }
+ bool IsDesignTimeVisible { get; set; }
+ bool IsDesignTimeLocked { get; }
+ string Name { get; }
+ bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy);
+ void Insert(IEnumerable nodes, IOutlineNode after, bool copy);
+ ObservableCollection Children{ get; }
+ }
+
+ public class OutlineNode: OutlineNodeBase
+ {
//TODO: Reset with DesignContext
- static Dictionary outlineNodes = new Dictionary();
+ static Dictionary outlineNodes = new Dictionary();
- OutlineNode(DesignItem designItem)
+ protected OutlineNode(DesignItem designitem): base(designitem)
{
- DesignItem = designItem;
UpdateChildren();
-
- var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance;
- if (hidden != null && (bool) hidden == true) {
- this._isDesignTimeVisible = false;
- ((FrameworkElement) this.DesignItem.Component).Visibility = Visibility.Hidden;
- }
-
- var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
- if (locked != null && (bool) locked == true) {
- this._isDesignTimeLocked = true;
- }
-
- //TODO
- DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
- DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
SelectionService.SelectionChanged += new EventHandler(Selection_SelectionChanged);
}
- public DesignItem DesignItem { get; private set; }
-
- public ISelectionService SelectionService {
- get { return DesignItem.Services.Selection; }
- }
-
- bool isExpanded = true;
-
- public bool IsExpanded {
- get {
- return isExpanded;
- }
- set {
- isExpanded = value;
- RaisePropertyChanged("IsExpanded");
- }
- }
-
- bool isSelected;
-
- public bool IsSelected {
- get {
- return isSelected;
- }
- set {
- if (isSelected != value) {
- isSelected = value;
- SelectionService.SetSelectedComponents(new[] { DesignItem },
- value ? SelectionTypes.Add : SelectionTypes.Remove);
- RaisePropertyChanged("IsSelected");
- }
- }
- }
-
- bool _isDesignTimeVisible = true;
-
- public bool IsDesignTimeVisible
+ static OutlineNode()
{
- get {
- return _isDesignTimeVisible;
- }
- set {
- _isDesignTimeVisible = value;
- var ctl = DesignItem.Component as UIElement;
- ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden;
-
- RaisePropertyChanged("IsDesignTimeVisible");
-
- if (!value)
- DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true);
- else
- DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset();
- }
+ DummyPlacementType = PlacementType.Register("DummyPlacement");
}
- bool _isDesignTimeLocked = false;
-
- public bool IsDesignTimeLocked
+ public static IOutlineNode Create(DesignItem designItem)
{
- get {
- return _isDesignTimeLocked;
- }
- set {
- _isDesignTimeLocked = value;
- ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
-
- RaisePropertyChanged("IsDesignTimeLocked");
-
-// if (value)
-// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
-// else
-// DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
- }
- }
-
- ObservableCollection children = new ObservableCollection();
-
- public ObservableCollection Children {
- get { return children; }
- }
-
- public string Name {
- get {
- if (string.IsNullOrEmpty(DesignItem.Name)) {
- return DesignItem.ComponentType.Name;
- }
- return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")";
+ IOutlineNode node;
+ if (!outlineNodes.TryGetValue(designItem, out node)) {
+ node = new OutlineNode(designItem);
+ outlineNodes[designItem] = node;
}
+ return node;
}
void Selection_SelectionChanged(object sender, DesignItemCollectionEventArgs e)
@@ -173,19 +80,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
IsSelected = DesignItem.Services.Selection.IsComponentSelected(DesignItem);
}
- void DesignItem_NameChanged(object sender, EventArgs e)
- {
- RaisePropertyChanged("Name");
- }
-
- void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
- {
- if (e.PropertyName == DesignItem.ContentPropertyName) {
- UpdateChildren();
- }
- }
-
- void UpdateChildren()
+ protected override void UpdateChildren()
{
Children.Clear();
@@ -193,8 +88,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
var content = DesignItem.ContentProperty;
if (content.IsCollection) {
UpdateChildrenCore(content.CollectionElements);
- }
- else {
+ } else {
if (content.Value != null) {
UpdateChildrenCore(new[] { content.Value });
}
@@ -208,16 +102,12 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
if (ModelTools.CanSelectComponent(item)) {
var node = OutlineNode.Create(item);
Children.Add(node);
- }
- else
- {
+ } else {
var content = item.ContentProperty;
- if (content != null)
- {
+ if (content != null) {
if (content.IsCollection) {
UpdateChildrenCore(content.CollectionElements);
- }
- else {
+ } else {
if (content.Value != null) {
UpdateChildrenCore(new[] { content.Value });
}
@@ -226,57 +116,5 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
}
}
}
-
- public bool CanInsert(IEnumerable nodes, OutlineNode after, bool copy)
- {
- var placementBehavior = DesignItem.GetBehavior();
- if (placementBehavior == null)
- return false;
- var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType);
- if (operation != null) {
- bool canEnter = placementBehavior.CanEnterContainer(operation, true);
- operation.Abort();
- return canEnter;
- }
- return false;
- }
-
- public void Insert(IEnumerable nodes, OutlineNode after, bool copy)
- {
- using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList())) {
- if (copy) {
- nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList();
- } else {
- foreach (var node in nodes) {
- node.DesignItem.Remove();
- }
- }
-
- var index = after == null ? 0 : Children.IndexOf(after) + 1;
-
- var content = DesignItem.ContentProperty;
- if (content.IsCollection) {
- foreach (var node in nodes) {
- content.CollectionElements.Insert(index++, node.DesignItem);
- }
- } else {
- content.SetValue(nodes.First().DesignItem);
- }
- moveTransaction.Commit();
- }
- }
-
- #region INotifyPropertyChanged Members
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- void RaisePropertyChanged(string name)
- {
- if (PropertyChanged != null) {
- PropertyChanged(this, new PropertyChangedEventArgs(name));
- }
- }
-
- #endregion
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs
new file mode 100644
index 0000000000..648b4097ec
--- /dev/null
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineNodeBase.cs
@@ -0,0 +1,225 @@
+/*
+ * Created by SharpDevelop.
+ * User: trubra
+ * Date: 2014-01-28
+ * Time: 10:09
+ *
+ * To change this template use Tools | Options | Coding | Edit Standard Headers.
+ */
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Windows;
+using System.Linq;
+using ICSharpCode.WpfDesign.Designer.Xaml;
+using ICSharpCode.WpfDesign.XamlDom;
+
+namespace ICSharpCode.WpfDesign.Designer.OutlineView
+{
+ ///
+ /// Description of OutlineNodeBase.
+ ///
+ public abstract class OutlineNodeBase : INotifyPropertyChanged, IOutlineNode
+ {
+
+ protected abstract void UpdateChildren();
+ //Used to check if element can enter other containers
+ protected static PlacementType DummyPlacementType;
+
+ protected OutlineNodeBase(DesignItem designItem)
+ {
+ DesignItem = designItem;
+
+
+ var hidden = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).ValueOnInstance;
+ if (hidden != null && (bool)hidden) {
+ _isDesignTimeVisible = false;
+ ((FrameworkElement)DesignItem.Component).Visibility = Visibility.Hidden;
+ }
+
+ var locked = designItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).ValueOnInstance;
+ if (locked != null && (bool)locked) {
+ _isDesignTimeLocked = true;
+ }
+
+ //TODO
+
+ DesignItem.NameChanged += new EventHandler(DesignItem_NameChanged);
+ DesignItem.PropertyChanged += new PropertyChangedEventHandler(DesignItem_PropertyChanged);
+ }
+
+ public DesignItem DesignItem { get; set; }
+
+ public ISelectionService SelectionService
+ {
+ get { return DesignItem.Services.Selection; }
+ }
+
+ bool isExpanded = true;
+
+ public bool IsExpanded
+ {
+ get
+ {
+ return isExpanded;
+ }
+ set
+ {
+ isExpanded = value;
+ RaisePropertyChanged("IsExpanded");
+ }
+ }
+
+ bool isSelected;
+
+ public bool IsSelected
+ {
+ get
+ {
+ return isSelected;
+ }
+ set
+ {
+ if (isSelected != value) {
+ isSelected = value;
+ SelectionService.SetSelectedComponents(new[] { DesignItem },
+ value ? SelectionTypes.Add : SelectionTypes.Remove);
+ RaisePropertyChanged("IsSelected");
+ }
+ }
+ }
+
+ bool _isDesignTimeVisible = true;
+
+ public bool IsDesignTimeVisible
+ {
+ get
+ {
+ return _isDesignTimeVisible;
+ }
+ set
+ {
+ _isDesignTimeVisible = value;
+ var ctl = DesignItem.Component as UIElement;
+ if(ctl!=null)
+ ctl.Visibility = _isDesignTimeVisible ? Visibility.Visible : Visibility.Hidden;
+
+ RaisePropertyChanged("IsDesignTimeVisible");
+
+ if (!value)
+ DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).SetValue(true);
+ else
+ DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsHiddenProperty).Reset();
+ }
+ }
+
+ bool _isDesignTimeLocked = false;
+
+ public bool IsDesignTimeLocked
+ {
+ get
+ {
+ return _isDesignTimeLocked;
+ }
+ set
+ {
+ _isDesignTimeLocked = value;
+ ((XamlDesignItem)DesignItem).IsDesignTimeLocked = _isDesignTimeLocked;
+
+ RaisePropertyChanged("IsDesignTimeLocked");
+
+ // if (value)
+ // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).SetValue(true);
+ // else
+ // DesignItem.Properties.GetAttachedProperty(DesignTimeProperties.IsLockedProperty).Reset();
+ }
+ }
+
+ ObservableCollection children = new ObservableCollection();
+
+ public ObservableCollection Children
+ {
+ get { return children; }
+ }
+
+ public string Name
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(DesignItem.Name)) {
+ return DesignItem.ComponentType.Name;
+ }
+ return DesignItem.ComponentType.Name + " (" + DesignItem.Name + ")";
+ }
+ }
+
+ void DesignItem_NameChanged(object sender, EventArgs e)
+ {
+ RaisePropertyChanged("Name");
+ }
+
+ void DesignItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == DesignItem.ContentPropertyName) {
+ UpdateChildren();
+ }
+ }
+
+
+
+ public bool CanInsert(IEnumerable nodes, IOutlineNode after, bool copy)
+ {
+ var placementBehavior = DesignItem.GetBehavior();
+ if (placementBehavior == null)
+ return false;
+ var operation = PlacementOperation.Start(nodes.Select(node => node.DesignItem).ToArray(), DummyPlacementType);
+ if (operation != null) {
+ bool canEnter = placementBehavior.CanEnterContainer(operation, true);
+ operation.Abort();
+ return canEnter;
+ }
+ return false;
+ }
+
+ public virtual void Insert(IEnumerable nodes, IOutlineNode after, bool copy)
+ {
+ using (var moveTransaction = DesignItem.Context.OpenGroup("Item moved in outline view", nodes.Select(n => n.DesignItem).ToList()))
+ {
+ if (copy) {
+ nodes = nodes.Select(n => OutlineNode.Create(n.DesignItem.Clone())).ToList();
+ } else {
+ foreach (var node in nodes) {
+ node.DesignItem.Remove();
+ }
+ }
+
+ var index = after == null ? 0 : Children.IndexOf(after) + 1;
+
+ var content = DesignItem.ContentProperty;
+ if (content.IsCollection) {
+ foreach (var node in nodes) {
+ content.CollectionElements.Insert(index++, node.DesignItem);
+ }
+ } else {
+ content.SetValue(nodes.First().DesignItem);
+ }
+ moveTransaction.Commit();
+ }
+ }
+
+ #region INotifyPropertyChanged Members
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public void RaisePropertyChanged(string name)
+ {
+ if (PropertyChanged != null)
+ {
+ PropertyChanged(this, new PropertyChangedEventArgs(name));
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
index ffbd1347aa..30d9a974b5 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/OutlineView/OutlineTreeView.cs
@@ -28,30 +28,30 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
protected override bool CanInsert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy)
{
UpdateCustomNodes(items);
- return (target.DataContext as OutlineNode).CanInsert(_customOutlineNodes,
- after == null ? null : after.DataContext as OutlineNode, copy);
+ return (target.DataContext as IOutlineNode).CanInsert(_customOutlineNodes,
+ after == null ? null : after.DataContext as IOutlineNode, copy);
}
protected override void Insert(DragTreeViewItem target, DragTreeViewItem[] items, DragTreeViewItem after, bool copy)
{
UpdateCustomNodes(items);
- (target.DataContext as OutlineNode).Insert(_customOutlineNodes,
- after == null ? null : after.DataContext as OutlineNode, copy);
+ (target.DataContext as IOutlineNode).Insert(_customOutlineNodes,
+ after == null ? null : after.DataContext as IOutlineNode, copy);
}
// Need to do this through a seperate List since previously LINQ queries apparently disconnected DataContext;bug in .NET 4.0
- private List _customOutlineNodes;
+ private List _customOutlineNodes;
void UpdateCustomNodes(IEnumerable items)
{
- _customOutlineNodes = new List();
+ _customOutlineNodes = new List();
foreach (var item in items)
- _customOutlineNodes.Add(item.DataContext as OutlineNode);
+ _customOutlineNodes.Add(item.DataContext as IOutlineNode);
}
public override bool ShouldItemBeVisible(DragTreeViewItem dragTreeViewitem)
{
- var node = dragTreeViewitem.DataContext as OutlineNode;
+ var node = dragTreeViewitem.DataContext as IOutlineNode;
return string.IsNullOrEmpty(Filter) || node.Name.ToLower().Contains(Filter.ToLower());
}
@@ -60,7 +60,7 @@ namespace ICSharpCode.WpfDesign.Designer.OutlineView
{
base.SelectOnly(item);
- var node = item.DataContext as OutlineNode;
+ var node = item.DataContext as IOutlineNode;
var surface = node.DesignItem.View.TryFindParent();
if (surface != null)
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs
index 420cc02c4e..e592e37cf2 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/CollectionEditor.xaml.cs
@@ -64,7 +64,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors
if(control!=null){
TypeMappings.TryGetValue(control.GetType(), out _type);
if (_type != null) {
- OutlineNode node = OutlineNode.Create(item);
+ IOutlineNode node = OutlineNode.Create(item);
Outline.Root = node;
PropertyGridView.PropertyGrid.SelectedItems = item.Services.Selection.SelectedItems;
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
index 290ba2f121..fcde434017 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
@@ -227,7 +227,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
if (selectedItems == null || selectedItems.Count == 0) return;
if (selectedItems.Count == 1) SingleItem = selectedItems[0];
-
+
foreach (var md in GetDescriptors()) {
if (PassesFilter(md.Name))
AddNode(md);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs
index c213b05690..a854a6e943 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.cs
@@ -42,7 +42,6 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
DefaultStyleKeyProperty.OverrideMetadata(typeof(PropertyGridView), new FrameworkPropertyMetadata(typeof(PropertyGridView)));
}
-
public PropertyGridView() : this(null)
{
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs
index c066d06222..21df7aedcf 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/CreateComponentTool.cs
@@ -157,9 +157,26 @@ namespace ICSharpCode.WpfDesign.Designer.Services
return item;
}
+ public static bool AddItemWithCustomSizePosition(DesignItem container, Type createdItem, Size size, Point position)
+ {
+ CreateComponentTool cct = new CreateComponentTool(createdItem);
+ return AddItemWithCustomSize(container, cct.CreateItem(container.Context), position, size);
+ }
+
+ public static bool AddItemWithDefaultSize(DesignItem container, Type createdItem, Size size)
+ {
+ CreateComponentTool cct = new CreateComponentTool(createdItem);
+ return AddItemWithCustomSize(container, cct.CreateItem(container.Context), new Point(0, 0), size);
+ }
+
internal static bool AddItemWithDefaultSize(DesignItem container, DesignItem createdItem, Point position)
{
- var size = ModelTools.GetDefaultSize(createdItem);
+ return AddItemWithCustomSize(container, createdItem, position, ModelTools.GetDefaultSize(createdItem));
+ }
+
+ internal static bool AddItemWithCustomSize(DesignItem container, DesignItem createdItem, Point position, Size size)
+ {
+
PlacementOperation operation = PlacementOperation.TryStartInsertNewComponents(
container,
new DesignItem[] { createdItem },
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs
index 63a450f196..1837bc404d 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Services/ToolService.cs
@@ -18,7 +18,7 @@
using System;
using System.Windows.Input;
-
+using System.Windows.Media;
namespace ICSharpCode.WpfDesign.Designer.Services
{
// See IToolService for description.
@@ -37,6 +37,11 @@ namespace ICSharpCode.WpfDesign.Designer.Services
});
}
+ public HitTestFilterCallback DesignPanelHitTestFilterCallback
+ {
+ set{ _designPanel.CustomHitTestFilterBehavior = value; }
+ }
+
public void Dispose()
{
if (_designPanel != null) {
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 ee6c301f7f..5b38b78d68 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
@@ -90,6 +90,7 @@
+
RightClickMultipleItemsContextMenu.xaml
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs
index fd1e76ea4e..7a0a7cdcb3 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/HierarchyTests.cs
@@ -26,7 +26,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class HierarchyTests : ModelTestHelper
{
private DesignItem _grid;
- private OutlineNode _outline;
+ private IOutlineNode _outline;
[TestFixtureSetUp]
public void Intialize()
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs
index 542b353bb0..d91fcb011c 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/InsertTests.cs
@@ -26,15 +26,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class CollectionElementsInsertTests : ModelTestHelper
{
private DesignItem _grid;
- private OutlineNode _outline;
+ private IOutlineNode _outline;
private DesignItem _gridButton;
private DesignItem _stackPanel;
private DesignItem _stackPanelButton;
- private OutlineNode _gridButtonNode;
- private OutlineNode _stackPanelNode;
- private OutlineNode _stackPanelButtonNode;
+ private IOutlineNode _gridButtonNode;
+ private IOutlineNode _stackPanelNode;
+ private IOutlineNode _stackPanelButtonNode;
[SetUp]
public void Intialize()
@@ -162,15 +162,15 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class ContentControlInsertTests : ModelTestHelper
{
private DesignItem _grid;
- private OutlineNode _outline;
+ private IOutlineNode _outline;
private DesignItem _gridButton;
private DesignItem _stackPanel;
private DesignItem _stackPanelImage;
- private OutlineNode _gridButtonNode;
- private OutlineNode _stackPanelNode;
- private OutlineNode _stackPanelImageNode;
+ private IOutlineNode _gridButtonNode;
+ private IOutlineNode _stackPanelNode;
+ private IOutlineNode _stackPanelImageNode;
[SetUp]
public void Intialize()
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs
index 9d3c37d7c5..849687a48b 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/OutlineView/SelectionTests.cs
@@ -26,7 +26,7 @@ namespace ICSharpCode.WpfDesign.Tests.Designer.OutlineView
public class SelectionTests : ModelTestHelper
{
private DesignItem _grid;
- private OutlineNode _outline;
+ private IOutlineNode _outline;
[SetUp]
public void Intialize()
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
index bb23a64926..a799c1f84e 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Tools.cs
@@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Windows.Media;
using ICSharpCode.WpfDesign.Adorners;
@@ -53,6 +54,10 @@ namespace ICSharpCode.WpfDesign
///
public interface IToolService
{
+ ///
+ /// Set custom HitTestFilterCallback for DesignPanel
+ ///
+ HitTestFilterCallback DesignPanelHitTestFilterCallback{ set; }
///
/// Gets the 'pointer' tool.
/// The pointer tool is the default tool for selecting and moving elements.
@@ -77,6 +82,10 @@ namespace ICSharpCode.WpfDesign
public interface IDesignPanel : IInputElement
{
///
+ /// Set a custom filter callback so that any element can be filtered out
+ ///
+ HitTestFilterCallback CustomHitTestFilterBehavior { get; set; }
+ ///
/// Gets the design context used by the DesignPanel.
///
DesignContext Context { get; }