是否可以提供按钮相关信息?

时间:2015-01-09 15:55:04

标签: c# wpf

很抱歉,如果这个问题在C#术语中没有多大意义。我已经在Obj-C中进行编程,在那里,你可以给一个按钮"标记"。

我问,因为我以编程方式创建了很多按钮,让他们为MouseDoubleClick共享相同的方法。问题是,我没有办法辨别哪个按钮没有按下#34;标签"。希望这有道理吗?

4 个答案:

答案 0 :(得分:3)

如果您在xaml中定义一个按钮,如下所示:

<Button x:Name="nameOfButtonToIdentify"/>

x:Name标记定义控件的名称。

如果你有一个像这样的事件处理程序:

private void nameOfButtonToIdentify_Click(object sender, RoutedEventArgs e)

您可以检查nameOfButtonToIdentify按钮是否被点击过这样:

private void nameOfButtonToIdentify_Click(object sender, RoutedEventArgs e)
{
    if(sender == nameOfButtonToIdentify)
    {
        //do stuff
    }
}

Button类型具有Tag属性,但它只是存储任意信息的属性,而不是识别该控件的方法。

答案 1 :(得分:0)

每个Tag都有一个FrameworkElement属性,所以你可以这样解决。

如果您想使用更多WPFier方式,则应考虑使用具有ICommand实现的ViewModel。此命令可以接收您可以传递的参数,例如整数(或枚举值,可以更易维护)。这应绑定到Command属性而不是公共EventHandler。

答案 2 :(得分:0)

像我的评论一样说这就是我做的事情

int numberForButton =0;
for (int i =0;i<100;i++)
{
    Button but = new Button();
    //usual place button fields
    but.MouseDoubleClick += click_event;
    but.Name = btn+numberForButton;
    numberForButton++;
}


private void btnName_Click(object sender, MouseDoubleClick_event e)
{
    //for button 97 chosen at random
    if(((Button)Sender).Name.SubString(2) == 97)
    {
        //code what you want button 97 to do
    }
}

这会在你工作的c#部分创建100个按钮,并且所有人都会调用相同的事件来放置注释代码,将按钮放在你喜欢的按钮上,然后将你想要的按钮改为多个按钮

答案 3 :(得分:0)

您也可以使用Lambda调用具有不同结果的相同方法。 如果您需要将特定参数传递给Click方法

,速度会更快
foreach(var element in list)
{
    //...

    Button btn = new Button();
    btn.Click += (s,e) => YourClickMethod(element.Property);
}