在C#Win Phone 8应用程序中以编程方式创建一组按钮

时间:2013-12-17 08:11:08

标签: c# windows-phone-8

我的C#文件有问题。我必须在特定位置以编程方式创建6个按钮。但我的for循环不起作用..

只显示一个按钮,而不是所有按钮。

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);
        }
}

}

}

有2,3个错误来..       使用System.Windows.Controls.Buttons不包含位置和大小的定义...... ???

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

循环不起作用。除了6个按钮外,只有一个按钮..

我想在特定位置添加按钮。所以这些错误符合我的要求.. 提前解决这个问题..:)

2 个答案:

答案 0 :(得分:0)

首先,Windows Phone中的按钮没有大小也没有位置。你为什么认为他们这样做?您有两个属性,而不是Size,而不是WidthHeight

至于位置,XAML不会那样工作。网格是一种特殊的控件,可以创建布局,并在网格中定义所需的列数和行数。然后将控件放在单个单元格中,或者可以使控件跨越单元格。

也许你应该首先了解一下XAML,这是一个很好的起点:Layout for Windows Phone

- 编辑:添加用于在第一行和第一列中放置按钮的示例代码。请注意,您必须在XAML或代码中定义网格和列定义。

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

Grid.SetColumn(btn,0);

答案 1 :(得分:0)

有一段时间我才对此..所以看看你会得到你所读到的...... 它有点长,但我认为它会帮助你理解你在寻找什么..你可以在一个循环中同时添加行和添加按钮,但更多的总是很好..

这是你的解决方案..对于你的情况..但我认为你的方向错误..

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();
    }

所以......你在某些示例项目中尝试过的东西更好..我想要给你什么... 并且正如之前的回答所说,按钮不包含你要设置的loc等属性..对于那个Margin是thr ..而对于Size Height和Width来说......重要的是......首先你为什么写Xaml你希望实现并尝试在新项目的运行时设置你在xaml中设置的属性..它肯定会告诉你工作原理..

 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);