コード例 #1
0
ファイル: DataGridLite.cs プロジェクト: DataDink/Controls
        private void CellMouseMove(object sender, MouseEventArgs e)
        {
            if (_mouseIsSelecting)
            {
                var cell = GetCellElement(sender as UIElement);
                if (cell == null)
                {
                    return;
                }
                if (_selectAnchor == null)
                {
                    _selectAnchor = GetCellElement(cell);
                }
                if (_selectAnchor.Equals(cell))
                {
                    SelectedCells = new[] { cell };
                    return;
                }

                var allRows       = _rows.ToList();
                var startRow      = LiteRow.GetRow(_selectAnchor);
                var endRow        = LiteRow.GetRow(cell);
                var startRowIndex = allRows.IndexOf(startRow);
                var endRowIndex   = allRows.IndexOf(endRow);
                var rowFromIndex  = Math.Min(startRowIndex, endRowIndex);
                var rowToIndex    = Math.Max(startRowIndex, endRowIndex);

                var startCellIndex = startRow.Cells.IndexOf(_selectAnchor);
                var endCellIndex   = endRow.Cells.IndexOf(cell);
                var cellFromIndex  = Math.Min(startCellIndex, endCellIndex);
                var cellToIndex    = Math.Max(startCellIndex, endCellIndex);

                var selection = new List <UIElement>();
                for (var r = rowFromIndex; r <= rowToIndex; r++)
                {
                    var selectRow = allRows[r];
                    for (var c = cellFromIndex; c <= cellToIndex; c++)
                    {
                        var selectCell = selectRow.Cells[c];
                        selection.Add(selectCell);
                    }
                }

                selection.Remove(cell);
                selection.Insert(0, cell);
                SelectedCells = selection;
            }
            ;
        }