Оберните сетку в a Границу :
<Border BorderBrush="#FF0000" BorderThickness="5" Margin="24,96,24,288">
<Grid>
....
</Grid>
</Border>
То, как вы это сделали, добавили Border-элемент в Grid-Control - поэтому, конечно, первая ячейка (если вы не установите Grid.Row / Grid.Column, оба будут по умолчанию равны 0 ) был нарисован с одним;)
Если вы хотите создать рамку для каждой ячейки, вам нужно обернуть каждый контент в элемент Border или отредактировать шаблон для сетки.
В качестве другой альтернативы вы можете попробовать стилизовать сетку (вот хорошая статья )
Вот еще один вопрос с этого сайта, касающийся аналогичной вещи: Стилизация фона сетки макета WPF
Чтобы сделать это немного понятнее, самый простой (если не самый точный) способ получить (четную) границу для каждой ячейки - это действительно установить границу для каждой ячейки И для сетки самостоятельно (либо в разметке, либо в коде) - Вот упрощенный пример:
<Border BorderBrush="#FF0000" BorderThickness="2" Grid.Row="0" Grid.Column="0" Margin="24,96,24,288" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border BorderBrush="#FF0000" BorderThickness="2" Grid.Row="0" Grid.Column="0"/>
<Border BorderBrush="#FF0000" BorderThickness="2" Grid.Row="0" Grid.Column="1"/>
<Border BorderBrush="#FF0000" BorderThickness="2" Grid.Row="1" Grid.Column="0"/>
<Border BorderBrush="#FF0000" BorderThickness="2" Grid.Row="1" Grid.Column="1"/>
</Grid>
</Border>