2

我想制作一个用按钮填充堆栈面板的扩展方法。

为了做到这一点,我必须传入一个 mouse-click-handler

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);
}
4

2 回答 2

1

RoutedEventHandler像这样传递它:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode,
            PagingManager pagingManager, RoutedEventHandler mouseClickHandler)
于 2010-03-10T12:49:21.890 回答
1

这取决于它是 WPF 还是 Winforms 应用程序。对于 WPF,它将是RoutedEventHandler(如ButtonBase.Click文档中所述)。对于 winforms,它是EventHandler(如Control.Click文档中所示)。

于 2010-03-10T12:50:56.040 回答