If you want an effect like this

then you have to handle it in the drawing routine.
The example above is done with
public class Matrix
{
int[,] data;
public Matrix(int rows, int columns)
{
Rows = rows;
Columns = columns;
data = new int[rows, columns];
}
internal int[,] Data => data;
public int Rows { get; }
public int Columns { get; }
public ref int this[int row, int col]
=> ref data[row, col];
public void DrawConsole(int rowCurrent, int colCurrent)
{
var fg = Console.ForegroundColor;
var bk = Console.BackgroundColor;
var curX = Console.CursorLeft;
var curY = Console.CursorTop;
const int width = 7;
for (int i = 0; i < Rows; i++)
{
for (int j = 0; j < Columns; j++)
{
Console.SetCursorPosition(width * j + 3, i * 2 + 2);
Console.ForegroundColor = ConsoleColor.Gray;
Console.BackgroundColor = ConsoleColor.Black;
Console.Write(" ");
if (i == rowCurrent && j == colCurrent)
{
Console.ForegroundColor = ConsoleColor.Black;
Console.BackgroundColor = ConsoleColor.DarkCyan;
}
else
{
Console.ForegroundColor = ConsoleColor.DarkBlue;
Console.BackgroundColor = ConsoleColor.Gray;
}
Console.Write(CenteredText(this[i, j].ToString(), width-1));
}
}
Console.SetCursorPosition(curX, curY);
Console.ForegroundColor = fg;
Console.BackgroundColor = bk;
}
public static string CenteredText(string text, int width)
{
if (text.Length >= width) return text;
int spaces = width- text.Length;
return text.PadRight(spaces / 2 + text.Length).PadLeft(width);
}
}
class Program
{
static void Main(string[] args)
{
var grid = new Matrix(9, 9);
int index = 0;
for (int i = 0; i < grid.Rows; i++)
{
for (int j = 0; j < grid.Columns; j++)
{
grid[i, j] = ++index;
}
}
grid.DrawConsole(3, 6);
}
}
The if (i == rowCurrent && j == colCurrent)
line branches off for the highlighted cell changing the display colors before writing the text out.