public virtual Position PositionAtPoint(Point point)
{
int? row = Rows.RowAtPoint(point.Y);
if (row == null)
return Position.Empty;
int? col = Columns.ColumnAtPoint(point.X);
if (col == null)
return Position.Empty;
Position realPos = new Position(row.Value, col.Value);
//Returns the logical position (using row/col span if present)
return PositionToStartPosition(realPos);
}