private void MergeCellSelectionRegions(IEnumerable <DataGridCellInfo> selectedCellItems) { this.mergedSelectionRegions.Clear(); var mergedItemsByRows = new List <SelectionRegionInfo>(); // merge regions by rows considering selectionRegionsInfos represents only simple cells int rowLine = -1; int columnLine = -1; SelectionRegionInfo startRegionInfo = null; foreach (var item in selectedCellItems) { if (rowLine < 0 || item.RowItemInfo.LayoutInfo.Line != rowLine || item.Column.ItemInfo.LayoutInfo.Line != columnLine) { startRegionInfo = new SelectionRegionInfo() { StartItem = item, EndItem = item }; rowLine = item.RowItemInfo.LayoutInfo.Line; columnLine = item.Column.ItemInfo.LayoutInfo.Line; mergedItemsByRows.Add(startRegionInfo); } else { startRegionInfo.EndItem = item; } columnLine++; } foreach (var item in mergedItemsByRows) { bool merged = false; foreach (var prevRowItem in this.mergedSelectionRegions) { if (prevRowItem.EndItem.RowItemInfo.LayoutInfo.Line + 1 == item.StartItem.RowItemInfo.LayoutInfo.Line) { if ((prevRowItem.StartItem.Column == null && prevRowItem.EndItem.Column == null && item.StartItem.Column == null && item.EndItem.Column == null) || (prevRowItem.StartItem.Column.ItemInfo.LayoutInfo.Line == item.StartItem.Column.ItemInfo.LayoutInfo.Line && prevRowItem.EndItem.Column.ItemInfo.LayoutInfo.Line == item.EndItem.Column.ItemInfo.LayoutInfo.Line)) { prevRowItem.EndItem = new DataGridCellInfo(item.StartItem.RowItemInfo, prevRowItem.EndItem.Column); merged = true; } } } if (!merged) { this.mergedSelectionRegions.Add(item); } } }
private void MergeRowSelectionRegions(IEnumerable <ItemInfo> selectedRowItems) { foreach (var item in selectedRowItems) { bool merged = false; foreach (var prevRowItem in this.mergedSelectionRegions) { if (prevRowItem.EndItem.RowItemInfo.LayoutInfo.Line + 1 == item.LayoutInfo.Line || item.LayoutInfo.Line <= prevRowItem.EndItem.RowItemInfo.LayoutInfo.Line) { prevRowItem.EndItem = new DataGridCellInfo(item, null); merged = true; } } if (!merged) { var region = new SelectionRegionInfo(); region.StartItem = new DataGridCellInfo(item, null); region.EndItem = new DataGridCellInfo(item, null); this.mergedSelectionRegions.Add(region); } } }