コード例 #1
0
        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;
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
                    }
                }
            }
        }