先谢谢 沙善
`for (int i = 0; i < 2; i++)
{
Button b1 = new Button();
//this.RegisterName("myAnimatedBrush", b1);
b1.Name = "button" + i;
b1.Height = 200;
b1.Width = 200;
b1.Margin = new Thickness(0, -100, 0, 0);
b1.HorizontalAlignment = HorizontalAlignment.Left;
b1.Content = "English";
b1.Background = System.Windows.Media.Brushes.Pink;
b1.Click+=new RoutedEventHandler(b1_Click);
canvasbtn.Children.Add(b1);
Canvas.SetLeft(b1,b1.Width * i);
}`
答案 0 :(得分:1)
我的两分钱:
如果您希望在循环中创建的按钮的行为方式不同,请考虑按钮本身的不同之处并检查它。例如:
如果您根据与最终用户相关的事物来区分您的行为,那么您的代码将是最有意义的。
示例:
for(int i=0; 0<10; i++)
{
var btn = new Button
{
DataContext = i,
Height = 200, Width = 200,
Margin=new Thickness(0, 100, 0 0),
});
btn.Click += (sender, e) =>
{
MessageBox.Show("You clicked button " + ((Button)sender).DataContext);
};
dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft
}
我建议你强烈考虑使用DockPanel而不是Canvas。除非您需要最终用户进行任意定位(拖放),否则Canvas几乎从不使用正确的面板。如果您使用DockPanel,则不必设置左坐标 - 它会自动为您执行此操作。
答案 1 :(得分:0)
void b1_Click(object sender, RoutedEventArgs e)
{
Button srcButton = e.Source as Button;
}
答案 2 :(得分:0)
这可能会有用。
protected void HandleBtnClick(object sender, EventArgs args)
{
Button btn = sender as Button;
if(btn==null){
return; //This is not expected.
}
if(btn.Name=="button1")
{
DoFirstTask();
}
else if (btn.Name == "button2")
{
DoSecondTask();
}
...
}