private void NormalizeWidthStars(GridElement grid, List <int> widthStarIndices) { double num1 = 0.0; foreach (int column in widthStarIndices) { num1 += grid.GetComputedColumnWidth(column); } foreach (int column in widthStarIndices) { double num2 = RoundingHelper.RoundLength(num1 == 0.0 ? 1.0 : grid.GetComputedColumnWidth(column) / num1); grid.ColumnDefinitions[column].Width = new GridLength(num2, GridUnitType.Star); } }
public static GridBox GetComputedGridBoxContainingRect(Rect rect, GridElement grid) { int columnBeforePosition = grid.GetComputedColumnBeforePosition(rect.Left); int columnAfterPosition = grid.GetComputedColumnAfterPosition(rect.Right); int rowBeforePosition = grid.GetComputedRowBeforePosition(rect.Top); int rowAfterPosition = grid.GetComputedRowAfterPosition(rect.Bottom); if (columnAfterPosition > columnBeforePosition + 1 && rect.Right < grid.GetComputedPositionOfColumn(columnAfterPosition - 1) + grid.GetComputedColumnWidth(columnAfterPosition - 1) / 2.0) { --columnAfterPosition; } if (columnAfterPosition > columnBeforePosition + 1 && rect.Left > grid.GetComputedPositionOfColumn(columnBeforePosition) + grid.GetComputedColumnWidth(columnBeforePosition) / 2.0) { ++columnBeforePosition; } if (columnAfterPosition == columnBeforePosition + 1 && columnAfterPosition < grid.ColumnDefinitions.Count && grid.GetComputedPositionOfColumn(columnAfterPosition) < (rect.Left + rect.Right) / 2.0) { ++columnBeforePosition; ++columnAfterPosition; } if (rowAfterPosition > rowBeforePosition + 1 && rect.Bottom < grid.GetComputedPositionOfRow(rowAfterPosition - 1) + grid.GetComputedRowHeight(rowAfterPosition - 1) / 2.0) { --rowAfterPosition; } if (rowAfterPosition > rowBeforePosition + 1 && rect.Top > grid.GetComputedPositionOfRow(rowBeforePosition) + grid.GetComputedRowHeight(rowBeforePosition) / 2.0) { ++rowBeforePosition; } if (rowAfterPosition == rowBeforePosition + 1 && rowAfterPosition < grid.RowDefinitions.Count && grid.GetComputedPositionOfRow(rowAfterPosition) < (rect.Top + rect.Bottom) / 2.0) { ++rowBeforePosition; ++rowAfterPosition; } return(new GridBox(columnBeforePosition, columnAfterPosition, rowBeforePosition, rowAfterPosition)); }
protected override bool OnDrag(Point dragStartPosition, Point dragCurrentPosition, bool scrollNow) { SceneView activeView = this.ActiveView; LayoutLineHeaderAdorner lineHeaderAdorner = this.ActiveAdorner as LayoutLineHeaderAdorner; GridElement grid = (GridElement)((Adorner)this.ActiveAdorner).Element; GridLayoutDesigner gridLayoutDesigner = (GridLayoutDesigner)grid.LayoutDesigner; activeView.EnsureVisible(this.ActiveAdorner, scrollNow); Matrix transformFromRoot = activeView.GetComputedTransformFromRoot((SceneElement)grid); dragStartPosition *= transformFromRoot; dragCurrentPosition = this.ToolBehaviorContext.SnappingEngine.SnapPoint(dragCurrentPosition); dragCurrentPosition *= transformFromRoot; if (lineHeaderAdorner == null || lineHeaderAdorner.Index <= 0) { return(false); } this.EnsureEditTransaction(); if (lineHeaderAdorner.IsX) { if (this.firstLineHeaderDrag) { this.effectiveLineHeaderIndex = lineHeaderAdorner.Index; if (dragCurrentPosition.X < dragStartPosition.X) { while (this.effectiveLineHeaderIndex > 1 && grid.GetComputedColumnWidth(this.effectiveLineHeaderIndex - 1) < 1.0 / activeView.Zoom) { --this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } else if (dragCurrentPosition.X > dragStartPosition.X) { while (this.effectiveLineHeaderIndex < grid.ColumnDefinitions.Count - 2 && grid.GetComputedColumnWidth(this.effectiveLineHeaderIndex) < 1.0 / activeView.Zoom) { ++this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } } if (!this.firstLineHeaderDrag) { int num = this.effectiveLineHeaderIndex - 1; double width = dragCurrentPosition.X - grid.GetComputedPositionOfColumn(num); gridLayoutDesigner.AdjustColumn(grid, num, width, this.IsShiftDown, !grid.ViewModel.IsInGridDesignMode); } } else { if (this.firstLineHeaderDrag) { this.effectiveLineHeaderIndex = lineHeaderAdorner.Index; if (dragCurrentPosition.Y < dragStartPosition.Y) { while (this.effectiveLineHeaderIndex > 1 && grid.GetComputedRowHeight(this.effectiveLineHeaderIndex - 1) < 1.0 / activeView.Zoom) { --this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } else if (dragCurrentPosition.Y > dragStartPosition.Y) { while (this.effectiveLineHeaderIndex < grid.RowDefinitions.Count - 2 && grid.GetComputedRowHeight(this.effectiveLineHeaderIndex) < 1.0 / activeView.Zoom) { ++this.effectiveLineHeaderIndex; } this.firstLineHeaderDrag = false; } } if (!this.firstLineHeaderDrag) { int row = this.effectiveLineHeaderIndex - 1; double height = dragCurrentPosition.Y - grid.GetComputedPositionOfRow(row); gridLayoutDesigner.AdjustRow(grid, row, height, this.IsShiftDown, !grid.ViewModel.IsInGridDesignMode); } } ((Adorner)this.ActiveAdorner).AdornerSet.InvalidateRender(); this.UpdateEditTransaction(); return(true); }