事件处理程序参数

时间:2011-08-08 12:16:21

标签: c# event-handling

我使用以下代码将按钮添加到列表中:

for (int i=0; i < mov.Theat.Count(); i++)  
{  
    StackPanel st=new StackPanel();  
    st.Orientation=System.Windows.Controls.Orientation.Horizontal;  
    st.HorizontalAlignment = HorizontalAlignment.Center;  
    TextBlock tx = new TextBlock();  
    tx.Text=mov.Theat[i];  
    st.Children.Add(tx);  
    TextBlock tx2=new TextBlock();  
    tx2.Text=mov.Time[i];  
    st.Children.Add(tx2);  
    Button test = new Button();  
    test.Width=450;  
    test.Content = st;  
    test.Click += new RoutedEventHandler(Button_Click);  
    theatlist.Items.Add(test);  
}

至于事件处理程序,如下所示:

void Button_Click(object sender, RoutedEventArgs e)  
{  
    Theat_Data TD=(App.Current as App).Theat.First(theat => theat.Name=="");  
    PhoneApplicationService.Current.State["Theat"] = TD;  
    this.GoToPage(ApplicationPages.Theat);  
}

我想传递一些关于偶数处理程序中所选按钮的变量,那么如何做到这一点呢?如果这是不可能的,那么我有哪些选项来识别按钮并将有关它的一些数据传递给事件处理程序?

4 个答案:

答案 0 :(得分:2)

我假设您的业务对象名为Thead_Data,并且您希望从Click方法中访问此对象:

在创建过程中,将数据对象附加到DataContext或Tag属性:

Button test = new Button(){DataContext=Theat[i]};

在事件处理程序中,将DataContext或Tag-property强制转换为业务对象:

void Button_Click(object sender, RoutedEventArgs e){
 Button btn=(Button)sender;
 Theat_Data td=(Theat_Data)button.DataContext;

 ...

}

答案 1 :(得分:1)

您可以像这样访问发件人:

void Button_Click(object sender, RoutedEventArgs e)
{
    var clickedButton = sender as Button;
}

答案 2 :(得分:0)

我不确定我完全理解你的要求,但事件处理程序的“sender”参数是按钮。你应该能够施展它:

   Button b = (Button)sender;

答案 3 :(得分:0)

您可以编写own event handler并在事件参数中添加自定义数据。