示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
                }
            }
        }