From 3e187df808d5c3445b32b157613331d12dc28702 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Sun, 27 Apr 2014 12:19:43 +0200 Subject: [PATCH] Make Snapplines also work for Items in other Containers --- .../Extensions/SnaplinePlacementBehavior.cs | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs index c71f44ab0f..81cc6f585b 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs @@ -178,6 +178,29 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } } + private IEnumerable AllDesignItems(DesignItem designItem = null) + { + if (designItem == null) + { + designItem = this.ExtendedItem.Services.DesignPanel.Context.RootItem; + yield return designItem; + yield return designItem.ContentProperty.Value; + designItem = designItem.ContentProperty.Value; + } + //yield return designItem.ContentProperty.Value; + + if (designItem.ContentProperty.IsCollection) + foreach (var collectionElement in designItem.ContentProperty.CollectionElements) + { + yield return collectionElement; + + foreach (var el in AllDesignItems(collectionElement)) + { + yield return el; + } + } + } + void BuildMaps(PlacementOperation operation) { horizontalMap = new List(); @@ -188,7 +211,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions AddLines(containerRect, 0, false); - foreach (var item in ExtendedItem.ContentProperty.CollectionElements + foreach (var item in AllDesignItems() /* ExtendedItem.ContentProperty.CollectionElements */ .Except(operation.PlacedItems.Select(f => f.Item))) { var bounds = GetPosition(operation, item);