2010-02-01 6 views
8

¿Cómo puedo pasar el controlador de eventos TextBlock_MouseDown_Test1 o TextBlock_MouseDown_Test2 a Smartgrid de manera que los TextBlocks los que genera ejecutará este controlador de eventos cuando se hace clic?¿Cómo paso un controlador de eventos como un parámetro de método?

El código siguiente obtiene el error:

The best overloaded method match for 'TestDel234.SmartGrid.SmartGrid(TestDel234.Window1, System.Collections.Generic.List, System.EventHandler)' has some invalid arguments

using System; 
using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 

namespace TestDel234 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      List<string> items = new List<string> { "one", "two", "three" }; 
      SmartGrid sg = new SmartGrid(this, items, TextBlock_MouseDown_Test1); 
     } 

     private void TextBlock_MouseDown_Test1(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("testing1"); 
     } 

     private void TextBlock_MouseDown_Test2(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("testing2"); 
     } 
    } 

    public class SmartGrid 
    { 
     public SmartGrid(Window1 window, List<string> items, EventHandler eventHandler) 
     { 
      foreach (var item in items) 
      { 
       TextBlock tb = new TextBlock(); 
       tb.Text = item; 
       tb.MouseDown += new MouseButtonEventHandler(eventHandler); 
       window.MainContent.Children.Add(tb); 
      } 
     } 
    } 
} 

Respuesta

7

Usted no puede lanzar el botón del ratón manejador de evento args a un manejador de sucesos sin formato - probar un EventHandler<MouseButtonEventArgs> en el constructor en su lugar.

Cuestiones relacionadas