标准网格的替代方案是使用UniformGrid(msdn链接).
它可能更适合这种情况(在我看来),因为它总是会给你相同大小的细胞.
使用了ala:
<UniformgGrid Columns="8" Rows="8">
<Control1/>
<Control2/>
<Control3/>
</UniformGrid>
Run Code Online (Sandbox Code Playgroud)
任何这些答案都会给你你想要的结果.
国际象棋似乎非常适合WPF的MVVM代码模式.
该模式将是国际象棋的游戏逻辑,听起来像是你有在控制之下.该视图将在WPF看比赛的,而视图模型将游戏的代表,在其中可以查看到数据绑定.
对于视图,使用UniformGrid的ItemsControl将用于游戏的2D表示.
这是一个开始(未经检查)
<ItemsControl ItemsSource="{Binding TheGame}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="8" Rows="8" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Background="{Binding SquareColor}">
<Path Data="{Binding PieceShape}" Fill="{Binding PieceColor}" />
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
为了使上述工作,您的ViewModel将需要一个ObservableCollection<ChessGridItem>并且ChessGridItem应该是一个DependencyObject公开的DependencyProperties SquareColor,PieceColor并且PieceShape