很抱歉,如果这个问题在C#术语中没有多大意义。我已经在Obj-C中进行编程,在那里,你可以给一个按钮"标记"。
我问,因为我以编程方式创建了很多按钮,让他们为MouseDoubleClick共享相同的方法。问题是,我没有办法辨别哪个按钮没有按下#34;标签"。希望这有道理吗?
答案 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);
}