无法为我想要的活动找到合适的处理程序

时间:2014-02-04 10:51:04

标签: c# wpf button browser bookmarks

我在找到Eventhandler的{​​{1}}时遇到问题。请注意,这不是ContextMenu。我已将ContextMenuStrip声明如下:

ContextMenu

示例:

http://puu.sh/6Jymf.jpg http://puu.sh/6Jymf.jpg

然后,处理程序(现在错误,.Closed在菜单关闭时触发事件):

public void button_MouseRightButtonDown(object sender, MouseButtonEventArgs e)//add a context menu to buttons
{
   Button button = sender as Button;
    menu = new ContextMenu();
    menu.Items.Add(new MenuItem() { Header = "Delete" });
    button.ContextMenu = menu;
    menu.Closed += button_DeleteButtonClicked;//find the right event

}

所以基本上我正在寻找一个处理器,当按下“Delete”时触发事件,而不是private void button_DeleteButtonClicked(object sender, RoutedEventArgs e)//delete bookmark { Button button = ((ContextMenu)sender).PlacementTarget as Button; string line_to_delete = button.ToString().Replace("System.Windows.Controls.Button: ", ""); string[] lines = File.ReadAllLines(@"bookmarks.txt"); File.WriteAllText(@"bookmarks.txt", String.Empty); for (int i = 0; i < lines.Length; i++) { if (lines[i] != line_to_delete) { using (StreamWriter wr = File.AppendText(@"bookmarks.txt")) { wr.WriteLine(lines[i]); } } } } 关闭时。我的猜测是,我对第一段代码的声明是错误的,但我似乎无法弄明白。

1 个答案:

答案 0 :(得分:2)

您必须绑定Click的{​​{1}}事件。它可能最终看起来像这样(我现在没有测试此代码的方法,但它应该接近):

MenuItem
如果您想要执行某些代码而无论用户选择什么,

绑定// (old) ... menu.Items.Add(new MenuItem() { Header = "Delete" }); // ... // (tweak to) ... var deleteMenuItem = new MenuItem() { Header = "Delete" }; deleteMenuItem.Click += button_DeleteButtonClicked; menu.Items.Add(deleteMenuItem); // no need to bind menu.Close for this // ... 非常有用,但在这种特定情况下,它看起来不像对您有用。

当然,还应调整处理程序方法以适应不同的ContextMenu.Close

sender