我在找到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]);
}
}
}
}
关闭时。我的猜测是,我对第一段代码的声明是错误的,但我似乎无法弄明白。
答案 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