C# 在网格中生成和放置按钮,以x、y坐标为参照

C# 在网格中生成和放置按钮,以x、y坐标为参照,c#,windows-phone-7,grid,coordinates,C#,Windows Phone 7,Grid,Coordinates,我需要生成一个按钮网格,这些按钮将被安排在一个表单上。这些按钮都将执行相同的代码,但应该能够识别所单击按钮的指定x和y值。关于如何实现这一点,我有3个想法,但我不知道哪一个最好 我可以创建一个按钮对象的二维数组,只需读入两个索引作为x和y坐标。这将允许我轻松地将相同的代码分配给所有按钮,但它不像数组那样灵活 我可以创建一个列表列表(x轴列表和y轴列表),并根据网格的大小为其添加按钮。但是,我不相信有一种方法可以将单个代码块分配给所有这些对象,而不将每个代码块直接指向同一个事件处理程序(尽管我认为

我需要生成一个按钮网格,这些按钮将被安排在一个表单上。这些按钮都将执行相同的代码,但应该能够识别所单击按钮的指定x和y值。关于如何实现这一点,我有3个想法,但我不知道哪一个最好

  • 我可以创建一个按钮对象的二维数组,只需读入两个索引作为x和y坐标。这将允许我轻松地将相同的代码分配给所有按钮,但它不像数组那样灵活
  • 我可以创建一个列表列表(x轴列表和y轴列表),并根据网格的大小为其添加按钮。但是,我不相信有一种方法可以将单个代码块分配给所有这些对象,而不将每个代码块直接指向同一个事件处理程序(尽管我认为我可以在生成button对象时进行指向)
  • 创建一个存储按钮、X和Y值的新类。此类还将包含处理必要的添加/删除操作的内置功能

  • 我不知道是否有更简单的解决方案-最终结果将是一个可单击的网格,它将打开或关闭单击的对象,然后将“打开”按钮的坐标输入数据库。

    您可以只分配每个按钮a,标识按钮。通过这种方式,您可以使代码独立于按钮的物理位置。这样,您就可以生成按钮,将它们添加到网格中,而不需要对它们进行任何其他引用


    我建议在
    标签中输入的不是坐标,而是与按钮的实际语义相对应的更好的东西(例如,按下按钮时必须拨打的号码,或要执行的操作的参数)。

    您可以只分配每个按钮a,标识按钮。通过这种方式,您可以使代码独立于按钮的物理位置。这样,您就可以生成按钮,将它们添加到网格中,而不需要对它们进行任何其他引用


    我建议在
    标签中输入的不是坐标,而是与按钮的实际语义相对应的更好的东西(例如,按下按钮时必须拨打的号码,或要执行的操作的参数)。

    以下是一些简单的代码,可以满足您的需要。将所有按钮连接到XAML中的同一事件处理程序

    <Grid x:Name='gameboardGrid'>
        <Grid.RowDefinitions>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="1*"/>
          <ColumnDefinition Width="1*"/>
          <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
    
    <Button Content="Button"  Grid.Column="1" Click="AllButtons_Click"/>
    <Button Content="Button" Grid.Column="0" Click="AllButtons_Click"/>
    <Button Content="Button"  Grid.Column="2" Grid.Row="1" Click="AllButtons_Click"/>
    <Button Content="Button"  Grid.Column="2" Click="AllButtons_Click"/>
            </Grid>
    
    编辑

    如果您想在没有XAML的情况下完成它。这是网格的XAML

     <Grid x:Name='gameboardGrid'>
            <Grid.RowDefinitions>
              <RowDefinition Height="1*"/>
              <RowDefinition Height="1*"/>
              <RowDefinition Height="1*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="1*"/>
              <ColumnDefinition Width="1*"/>
              <ColumnDefinition Width="1*"/>
            </Grid.ColumnDefinitions>
    </Grid>
    
    
    
    然后添加此代码以生成按钮

    public MainPage() {
      InitializeComponent();
      for (int rowCounter = 0; rowCounter < 3; rowCounter++) {
        for (int colCounter = 0; colCounter < 3; colCounter++) {
          var codeButton = new Button();
          Grid.SetRow(codeButton, rowCounter);
          Grid.SetColumn(codeButton, colCounter);
    
          codeButton.Click += new RoutedEventHandler(AllButtons_Click);
          gameboardGrid.Children.Add(codeButton);
        }
      }
    }  
    
    public主页(){
    初始化组件();
    对于(int rowCounter=0;rowCounter<3;rowCounter++){
    for(int colCounter=0;colCounter<3;colCounter++){
    var codeButton=新按钮();
    Grid.SetRow(代码按钮、行计数器);
    Grid.SetColumn(代码按钮、列计数器);
    codeButton.Click+=新建路由EventHandler(单击所有按钮);
    gameboardGrid.Children.Add(codeButton);
    }
    }
    }  
    
    以下是一些简单的代码,可以满足您的需要。将所有按钮连接到XAML中的同一事件处理程序

    <Grid x:Name='gameboardGrid'>
        <Grid.RowDefinitions>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="1*"/>
          <ColumnDefinition Width="1*"/>
          <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
    
    <Button Content="Button"  Grid.Column="1" Click="AllButtons_Click"/>
    <Button Content="Button" Grid.Column="0" Click="AllButtons_Click"/>
    <Button Content="Button"  Grid.Column="2" Grid.Row="1" Click="AllButtons_Click"/>
    <Button Content="Button"  Grid.Column="2" Click="AllButtons_Click"/>
            </Grid>
    
    编辑

    如果您想在没有XAML的情况下完成它。这是网格的XAML

     <Grid x:Name='gameboardGrid'>
            <Grid.RowDefinitions>
              <RowDefinition Height="1*"/>
              <RowDefinition Height="1*"/>
              <RowDefinition Height="1*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="1*"/>
              <ColumnDefinition Width="1*"/>
              <ColumnDefinition Width="1*"/>
            </Grid.ColumnDefinitions>
    </Grid>
    
    
    
    然后添加此代码以生成按钮

    public MainPage() {
      InitializeComponent();
      for (int rowCounter = 0; rowCounter < 3; rowCounter++) {
        for (int colCounter = 0; colCounter < 3; colCounter++) {
          var codeButton = new Button();
          Grid.SetRow(codeButton, rowCounter);
          Grid.SetColumn(codeButton, colCounter);
    
          codeButton.Click += new RoutedEventHandler(AllButtons_Click);
          gameboardGrid.Children.Add(codeButton);
        }
      }
    }  
    
    public主页(){
    初始化组件();
    对于(int rowCounter=0;rowCounter<3;rowCounter++){
    for(int colCounter=0;colCounter<3;colCounter++){
    var codeButton=新按钮();
    Grid.SetRow(代码按钮、行计数器);
    Grid.SetColumn(代码按钮、列计数器);
    codeButton.Click+=新建路由EventHandler(单击所有按钮);
    gameboardGrid.Children.Add(codeButton);
    }
    }
    }  
    
    我考虑过XAML的想法,但我正在根据用户输入动态生成按钮-我可以在运行时向网格中添加任意次数的无名按钮吗?是的,您可以通过实例化一个按钮并将其添加到网格中。当然,您可以通过编程来调整网格列和行的大小。谢谢-这正是我所需要的。我考虑过XAML的想法,但我正在根据用户输入动态生成按钮-我可以在运行时向网格中添加任意次数的无名按钮吗?是的,您可以通过实例化一个并添加到网格中来实现。当然,您可以通过编程来调整网格列和行的大小。谢谢-这就是我所需要的。