private void SnapshotDraggedElements(SceneView view, Point referencePoint) { List <Point> list1 = new List <Point>(); List <CanonicalTransform> list2 = new List <CanonicalTransform>(); List <LayoutCacheRecord> list3 = new List <LayoutCacheRecord>(); Rect empty = Rect.Empty; foreach (BaseFrameworkElement element in this.DraggedElements) { element.GetComputedTightBounds(); Point point = view.TransformPoint((IViewObject)view.HitTestRoot, element.Visual, referencePoint); list1.Add(point); list2.Add(new CanonicalTransform((Transform)element.GetComputedValueAsWpf(Base2DElement.RenderTransformProperty)) { Center = element.RenderTransformOriginInElementCoordinates }); if (element.ViewObject != null) { LayoutCacheRecord layoutCacheRecord = this.ActiveView.ViewModel.GetLayoutDesignerForChild((SceneElement)element, true).CacheLayout(element); list3.Add(layoutCacheRecord); empty.Union(layoutCacheRecord.Rect); } } this.Offsets = list1.AsReadOnly(); this.BaseRenderTransforms = list2.AsReadOnly(); this.LayoutCacheRecords = list3.AsReadOnly(); this.BoundsOfAllElements = empty; }
public void SetLayoutFromCache(BaseFrameworkElement element, LayoutCacheRecord layoutCacheRecord, Rect boundsOfAllCaches) { LayoutConstraintMode widthConstraintMode = this.GetWidthConstraintMode(element); int num = (int)this.GetHeightConstraintMode(element); this.ClearUnusedLayoutProperties(element); if (layoutCacheRecord == null) { return; } using (element.ViewModel.EnforceGridDesignMode) { Rect rect = layoutCacheRecord.Rect; if ((widthConstraintMode & LayoutConstraintMode.Overlapping) != LayoutConstraintMode.NonOverlappingGridlike) { this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.None, LayoutOverrides.None, SetRectMode.Default); } else if (layoutCacheRecord.Overlapping) { if (!boundsOfAllCaches.IsEmpty) { rect.Offset(-boundsOfAllCaches.Left, -boundsOfAllCaches.Top); } this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.Margin, LayoutOverrides.None, SetRectMode.CreateAtSlotPosition); } else { rect.Offset(-layoutCacheRecord.SlotOrigin.X, -layoutCacheRecord.SlotOrigin.Y); this.SetChildRect(element, rect, layoutCacheRecord.Overrides, LayoutOverrides.None, LayoutOverrides.None, SetRectMode.CreateAtSlotPosition); } } }
public void SetCurrentRects(BaseFrameworkElement parent, List <LayoutCacheRecord> layoutCache) { ISceneNodeCollection <SceneNode> defaultContent = parent.DefaultContent; if (layoutCache.Count != defaultContent.Count) { return; } using (parent.ViewModel.EnforceGridDesignMode) { for (int index = 0; index < defaultContent.Count; ++index) { BaseFrameworkElement element = defaultContent[index] as BaseFrameworkElement; if (element != null && !PlatformTypes.ContextMenu.IsAssignableFrom((ITypeId)element.Type) && element.IsViewObjectValid) { LayoutCacheRecord layoutCacheRecord = layoutCache[index]; this.SetLayoutFromCache(element, layoutCacheRecord, Rect.Empty); } } } }