internal FrameworkElement GetAnchorElement(Column col)
 {
     GridPanel columnHeaders = _flex.ColumnHeaders;
     int row = columnHeaders.Rows.Count - 1;
     FrameworkElement frameworkElement = columnHeaders.GetCellElement(new CellRange(row, col.Index));
     if (frameworkElement == null)
     {
         foreach (object current in columnHeaders.Children)
         {
             Border border = current as Border;
             if (border != null)
             {
                 CellRange cellRange = new CellRange(border);
                 if (cellRange.ContainsColumn(col.Index) && cellRange.ContainsRow(row))
                 {
                     frameworkElement = border;
                     break;
                 }
             }
         }
     }
     return frameworkElement;
 }
 public void Select(int row, int col, int row2, int col2, bool scrollIntoView)
 {
     CellRange cellRange = _sel;
     CellRange cellRange1 = new CellRange(row, col, row2, col2);
     cellRange1 = AdjustSelection(cellRange1, false);
     if (cellRange1 == _sel)
     {
         if (scrollIntoView)
         {
             _grid.ScrollIntoView(cellRange1.Row, cellRange1.Column);
         }
         return;
     }
     CellRangeEventArgs cellRangeEventArg = new CellRangeEventArgs(_grid.Cells, cellRange1);
     _grid.OnSelectionChanging(cellRangeEventArg);
     if (cellRangeEventArg.Cancel)
     {
         return;
     }
     if (_grid.ActiveEditor != null)
     {
         return;
     }
     cellRange1.Row = Math.Min(cellRange1.Row, _grid.Rows.Count - 1);
     cellRange1.Row2 = Math.Min(cellRange1.Row2, _grid.Rows.Count - 1);
     _sel = cellRange1;
     if (_grid.SelectionMode == SelectionMode.ListBox)
     {
         RowCollection rows = _grid.Rows;
         for (int i = 0; i < rows.Count; i++)
         {
             rows[i].SetFlag(RowColFlags.Selected, cellRange1.ContainsRow(i));
         }
     }
     _grid.UpdateSelectedItems(false);
     if (scrollIntoView)
     {
         _grid.ScrollIntoView(cellRange1.Row, cellRange1.Column);
     }
     foreach (CellRange key in GetRangeDelta(cellRange, cellRange1).Keys)
     {
         UpdateRangeBrushes(key);
     }
     if (_grid.ColumnHeaderSelectedBackground != null)
     {
         UpdateHeaderBackground(true);
     }
     if (_grid.RowHeaderSelectedBackground != null)
     {
         UpdateHeaderBackground(false);
     }
     _grid.UpdateMarquee();
     _grid.OnSelectionChanged(cellRangeEventArg);
 }