Cree un grupo de botones programáticamente en la aplicación C # Win Phone 8

Tengo un problema en mi archivo C #. Tengo que crear 6 botones programáticamente en una ubicación específica. pero mi bucle for no funciona ...

solo un botón muestra y no todos los botones.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
//using System.Array;

namespace AimPass
{
     public partial class main : PhoneApplicationPage
     {
    public main()
     {
        InitializeComponent();

    }

private void newbutton(object sender, RoutedEventArgs e)
    {
//How many buttons do you want ?
        int NumOfButtons = 6;
       //X Location of each created button in the panel
        int loc = 20;
        for (int i = 1; i <= NumOfButtons; i++)
        {
            Button btn = new Button();
            {
                btn.Name = "Btn-" + i.ToString();
              btn.Size= new Size(50, 20);
               btn.Tag = i;
                btn.Content = "Browse-" + i.ToString();
              btn.location = new Point(5, loc);
            }
            //Add Click event Handler for each created button
           btn.Click += Buttons_Click;
            loc += 20;
           //Add the created btn to grid
            grid.Children.Add(btn);
        }
}

}

}

hay 2,3 errores viene ..       using System.Windows.Controls.Buttons no contiene una definición de ubicación y tamaño ... ???

    btn.Click += Buttons_Click; does not exist in current context..

Y el bucle no funciona ... Solo un botón viene excepto 6 botones ...

Quiero agregar el botón en una ubicación específica ... Por lo tanto, estos errores corresponden a mis requisitos. Gracias por resolver esto ... :)

0

2 Respuestas

Algún tiempo antes tengo derecho a esto ... así que eche un vistazo obtendrá lo que ha leído .. es un poco largo, pero creo que te ayudará a entender lo que estás buscando ... Puedes agregar la fila y agregar el botón en un bucle al mismo tiempo, pero un poco más siempre es bueno.

esta es su solución ... para su caso ... pero creo que va por el camino equivocado ...

private void newbutton()
    {
       //How many buttons do you want ?
        int NumOfButtons = 6;
       //X Location of each created button in the panel
        StackPanel stkpanel = new StackPanel();
        stkpanel.Orientation = Orientation.Horizontal;
        int loc = 20;
        for (int i = 1; i <= NumOfButtons; i++)
        {
            Button btn = new Button();
            {
                btn.Name = "Btn-" + i.ToString();
                btn.Height = 20;
                btn.Width = 50;
                btn.Foreground = new SolidColorBrush(Colors.White);
                btn.Content = "btnnum" + i.ToString();
                btn.Tag = i;
                btn.Content = "Browse-" + i.ToString();
                btn.Margin = new Thickness(5 + loc, 5, 5, 5);
                btn.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top;
            }
            //Add Click event Handler for each created button
            btn.Click += btn_Click;
            loc += 20;
           //Add the created btn to grid
            stkpanel.Children.Add(btn);
        }
        grid.Children.Add(stkpanel);
    }

    void btn_Click(object sender, RoutedEventArgs e)
    {
      //throw new NotImplementedException();
    }

entonces ... es mejor que hayas intentado algo en algunos proyectos de muestra ... lo que quiero decirte. Y como la respuesta anterior dice que el botón no contiene propiedades como loc, etc., que quiere establecer ... para ese Margen es thr.and For Size Height and Width están ahí ... y lo importante es ... primero escribe Xaml para qué usted quiere lograr y tratar de establecer las propiedades que estableció en xaml durante el tiempo de ejecución en el nuevo proyecto ... definitivamente le dirá cómo funcionan las cosas ...

 Grid grdbooltype = new Grid();
            grdbooltype.Name = "Grid_" + keybooltype;
            grdbooltype.Margin = new Thickness(0, 20, 20, 0);
            grdbooltype.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
            grdbooltype.RowDefinitions.Add(new RowDefinition());

            TextBlock objtextblock = new TextBlock();
            objtextblock.Text = "Select Image";
            objtextblock.FontSize = 15;
            grdbooltype.Children.Add(objtextblock);
            Grid.SetRow(objtextblock, 0);


            Grid grdtoggleswitch = new Grid();
            grdtoggleswitch.Name = headername;
            grdtoggleswitch.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto });
            grdtoggleswitch.ColumnDefinitions.Add(new ColumnDefinition());

            TextBlock txtblktoggleswitchleft = new TextBlock();
            txtblktoggleswitchleft.FontSize = 15;
            txtblktoggleswitchleft.VerticalAlignment = VerticalAlignment.Center;
            txtblktoggleswitchleft.Text = headername;
            Grid.SetColumn(txtblktoggleswitchleft, 0);

            ToggleSwitch toggleswitch = new ToggleSwitch();
            toggleswitch.Name = key;
            toggleswitch.HorizontalAlignment = HorizontalAlignment.Right;
            toggleswitch.Padding = new Thickness(0);
            toggleswitch.IsOn = defaultvalue;
            toggleswitch.Margin = new Thickness(0, 0, 0, 0);
            toggleswitch.OnContent = "On";
            toggleswitch.OffContent = "Off";
            Grid.SetColumn(toggleswitch, 1);

            grdtoggleswitch.Children.Add(txtblktoggleswitchleft);
            grdtoggleswitch.Children.Add(toggleswitch);

            Grid.SetRow(grdtoggleswitch, 1);

            grdbooltype.Children.Add(grdtoggleswitch);
0
agregado
Te perdiste la primera línea, supongo. "Grdbooltype" se define allí.
agregado el autor C4u, fuente
Krybooltype n otro tanto tampoco están contenidos en el contexto actual ... ¿cuál es la posible solución para ese tipo de error?
agregado el autor Arsal, fuente

Bueno, antes que nada, los botones en Windows Phone no tienen tamaño ni ubicación. ¿Por qué crees que lo hacen? En lugar de Size , tiene dos propiedades: Width y Height .

En cuanto a la ubicación, XAML no funciona de esa manera. La cuadrícula es un tipo especial de control que crea un diseño y define cuántas columnas y filas desea en su cuadrícula. A continuación, coloca controles dentro de celdas individuales o puede hacer que los controles abarquen celdas.

Quizás primero deba aprender algo acerca de XAML, este es un buen punto de partida: Diseño para Windows Phone .

- EDITAR: Agregar código de muestra para colocar un botón en la primera fila y la primera columna. Tenga en cuenta que debe definir la cuadrícula y la definición de columna en XAML o código.

grid.Children.Add(btn);
Grid.SetRow(btn, 0);

Grid.SetColumn (btn, 0);

0
agregado
¿Conoces la sintaxis de colocar mi control en la fila o columna de la cuadrícula?
agregado el autor Arsal, fuente