如何在c#中为按钮指定新位置? private void Hangman_onload() { 常数int btnSize=25; 对于(var i=65;i

如何在c#中为按钮指定新位置? private void Hangman_onload() { 常数int btnSize=25; 对于(var i=65;i,c#,xaml,button,uwp,C#,Xaml,Button,Uwp,来说,如果出于通常的原因坚持在代码隐藏中执行所有操作,那么看起来更像这样: 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

来说,如果出于通常的原因坚持在代码隐藏中执行所有操作,那么看起来更像这样:

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);
    }
}
如果出于某种原因确实要使用
网格
,则需要在
网格
中定义行和列,并在每个
按钮
上设置行和列值

XAML

等等

如果这是WPF(不是,但也许有一天做WPF的人会点击它),那么最好、最简单的解决方案是使用
UniformGrid
而不是常规的
Grid
,并在其上设置正确的行数和列数:

//  Row zero, column zero
Grid.SetRow(btn, 0);
Grid.SetColumn(btn, 0);


对于您的情况,我使用的是Win7,无法对其进行测试。

因为这些按钮只有一个字符(至少根据您的问题),所以项目的大小将始终相同。因此我建议您使用GridView和DataTemplate将ASCII字符作为按钮加载

将您的
Hangman_onload
更改为下方

<UniformGrid x:Name="GridMain" Rows="10" Columns="10">
</UniformGrid>
private void Hangman_onload()
{
List bindingData=新列表();

对于(var i=65;您好!谢谢您的快速回答!实际上它是UWP,我假设它也适用于UWP?@M.Kesküll您必须指定您正在使用的UI框架。否则,这个问题完全无法回答。也许
VariableSizedWrapGrid
将完成与
UniformGrid
相同的工作。我认为
Grid
解决方案h显式
ColumnDefinitions
RowDefinitions
应该在UWP中工作。试一试。
//  Row zero, column zero
Grid.SetRow(btn, 0);
Grid.SetColumn(btn, 0);
<UniformGrid x:Name="GridMain" Rows="10" Columns="10">
</UniformGrid>
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 x:Name="variableGrid" ItemsSource="{Binding }">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding ''}" />
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>