我的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个按钮外,只有一个按钮..
我想在特定位置添加按钮。所以这些错误符合我的要求.. 提前解决这个问题..:)
答案 0 :(得分:0)
首先,Windows Phone中的按钮没有大小也没有位置。你为什么认为他们这样做?您有两个属性,而不是Size
,而不是Width
和Height
。
至于位置,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);