2010-03-10 4 views
2

Я хочу сделать расширение метод который заполняет стеклянную панель с помощью кнопок.Как передать метод мыши в качестве параметра?

Для этого у меня должно быть передать обработчик мыши.

Какой тип должен быть здесь mouseClickHandler?

Я знаю, что это что-то вроде них, но все они не работают:

  • delegate
  • Func<object, RoutedEventArgs>
  • Action<>

Код:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode, 
      PagingManager pagingManager, ??????? mouseClickHandler) 
{ 
    var menuPageItems = PageItems.GetPageItemsWithMenu(menuIdCode); 
    spMenu.Children.Clear(); 
    foreach (var pageItem in menuPageItems) 
    { 
     var button = new Button(); 
     button.Content = pageItem.Title; 
     button.Margin = new Thickness { Right = 3 }; 
     button.Tag = pageItem.IdCode; 
     button.Cursor = Cursors.Hand; 
     button.Click += new RoutedEventHandler(mouseClickHandler); 
     if (pageItem.IdCode == pagingManager.CurrentPageItemIdCode) 
      button.IsEnabled = false; 
     spMenu.Children.Add(button); 
    } 
} 

Я бы назвал это так:

QuickMenu.FillMenuWithPages("quick", PagingManager, Menu_Button_Click); 

и это мыши левши:

void Menu_Button_Click(object sender, RoutedEventArgs e) 
{ 
    string pageItemIdCode = ((FrameworkElement)sender).Tag.ToString(); 
    PagingManager.SwitchPage(pageItemIdCode); 
} 

ответ

1

Pass это как RoutedEventHandler так:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode, 
      PagingManager pagingManager, RoutedEventHandler mouseClickHandler) 
+0

отлично, вот что мне нужно, спасибо –

1

Это зависит от того, это приложение WPF или Winforms. Для WPF это будет RoutedEventHandler (как указано в документации ButtonBase.Click). Для winforms это EventHandler (как видно из документации Control.Click).

Смежные вопросы