private void Hangman_OnLoaded()
{
const int btnSize = 25;
for (var i = 65; i <= 90; i++)
{
var btn = new Button { Content = (char)i };
btn.Width = btn.Height = btnSize;
var margin = btn.Margin;
margin.Left += btnSize + 100;
btn.Margin = margin;
GridMain.Children.Add(btn);
}
}
所以,我有这个代码块,我想用 ASCII 创建字母。我有一个名为 GridMain 的网格。我想显示 A-Z 。当我调试时,我看到按钮是在一个嵌套中创建的。我应该用什么来显示这些字母彼此相邻?
答案 0 :(得分:3)
由于这些是按钮,具有单个字符(至少根据您的问题),项目的大小将始终相同。所以我建议你使用GridView和DataTemplate将ASCII字符作为按钮加载。
将您的Hangman_OnLoaded
更改为以下。
private void Hangman_OnLoaded()
{
List<char> bindingData = new List<char>();
for (var i = 65; i <= 90; i++)
{
bindingData.Add((char)i);
}
variableGrid.DataContext = bindingData;
}
下面是你的GridView。
<GridView x:Name="variableGrid" ItemsSource="{Binding }">
<GridView.ItemTemplate>
<DataTemplate>
<Button Content="{Binding ''}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
答案 1 :(得分:0)
如果你因为通常的原因坚持在代码中做所有事情,那就更像是这样:
var GridMain = new System.Windows.Controls.Primitives.UniformGrid
{
Name = "GridMain",
Rows = 10,
Columns = 10
};
如果由于某种原因您真的想使用Grid
,则需要在Grid
中定义行和列,并在每个Button
上设置行和列值。
XAML
<Grid x:Name="GridMain">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<!-- etc. however many rows -->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<!-- etc. however many columns -->
</Grid.ColumnDefinitions>
</Grid>
C#:
// Row zero, column zero
Grid.SetRow(btn, 0);
Grid.SetColumn(btn, 0);
等
如果这是WPF(事实并非如此,但是某些人可能会在某天点击这一点),那么您最好,最简单的解决方案是使用UniformGrid
代替常规Grid
,并设置正确的行数和列数:
<UniformGrid x:Name="GridMain" Rows="10" Columns="10">
</UniformGrid>
在您的情况下,对于UniformGrid
, VariableSizedWrapGrid
might be an acceptable UWP substitute,但我在这里使用Win7并且无法测试它。