如何分配点击事件

26

我有一个动态生成的按钮数组。虽然在代码中我已经为按钮点击编写了函数,但是我找不到一种方法在代码中设置按钮的点击名称。

那么,XAML的等效代码是什么?

<Button x:Name="btn1" Click="btn1_Click">

或者,在以下代码中,我应该为"????" 放置什么?

Button btn = new Button();
btn.Name = "btn1";
btn.???? = "btn1_Click";
5个回答

55
Button btn = new Button();
btn.Name = "btn1";
btn.Click += btn1_Click;

private void btn1_Click(object sender, RoutedEventArgs e)
{
    // do something
}

1
为什么要使用 +=?按钮是否包含多个点击事件? - user189728
@user189728 这是.NET中“事件(Event)”系统的工作方式,您可以订阅多个“处理程序(handlers)”到任何事件。您几乎可以将事件视为一个类,该类已重写了+=运算符,并且它实际上将回调附加到队列中。 - Gaboik1
是的,任何事件都可以有多个处理程序(如果您想这样考虑,可以称之为函数回调)。 - StayOnTarget

11

下面的代码应该可以解决问题:

btn.Click += btn1_Click;

5
// sample C#
public void populateButtons()
{
    int xPos;
    int yPos;

    Random ranNum = new Random();

    for (int i = 0; i < 50; i++)
    {
        Button foo = new Button();
        Style buttonStyle = Window.Resources["CurvedButton"] as Style;

        int sizeValue = ranNum.Next(50);

        foo.Width = sizeValue;
        foo.Height = sizeValue;
        foo.Name = "button" + i;

        xPos = ranNum.Next(300);
        yPos = ranNum.Next(200);

        foo.HorizontalAlignment = HorizontalAlignment.Left;
        foo.VerticalAlignment = VerticalAlignment.Top;
        foo.Margin = new Thickness(xPos, yPos, 0, 0);

        foo.Style = buttonStyle;

        foo.Click += new RoutedEventHandler(buttonClick);
        LayoutRoot.Children.Add(foo);
   }
}

private void buttonClick(object sender, EventArgs e)
{
  //do something or...
  Button clicked = (Button) sender;
  MessageBox.Show("Button's name is: " + clicked.Name);
}

1

我认为WPF不支持您尝试实现的内容,即使用方法名称或btn1.Click =“btn1_Click”将方法分配给按钮。您将不得不使用上面答案中建议的方法,即使用适当的方法注册按钮单击事件 btn1.Click += btn1_Click;


0

你应该将以下行放置在下面

btn.Click = btn.Click + btn1_Click;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接