我一天中的大部分时间都在阅读帖子,但无法找到或明白这一点。几乎所有问题和答案都在XAML中构建菜单,但我尝试在代码中执行此操作。
菜单构建正常(还有更多内容,只是在这里缩写)并正确启用或禁用但我无法执行命令。菜单功能区上有一个按钮,可以重新提交,所以我知道后端的代码可以正常工作,我似乎无法弄清楚如何从菜单中调用它。任何想法都会很好。
要从MainView.xaml.cs构建和显示菜单的鼠标事件。线路上有**需要修复。
private void MainDataGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
ContextMenu m = new ContextMenu();
MenuItem mi = new MenuItem();
m.Items.Add(new MenuItem());
mi = (MenuItem)m.Items[0];
mi.Header = "Resubmit";
**mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New, ResubmitCommand));**
mi.IsEnabled = MainViewModel.CurrentSelectedItems.Count > 0;
.
.
.
m.IsOpen = true;
}
来自我的MainViewModel.cs的ResubmitCommand:
public ICommand ResubmitCommand
{
get
{
return _resubmitCommand ??
(_resubmitCommand = new RelayCommand(
o => Resubmit(),
o => CanResubmit));
}
}
感谢。
答案 0 :(得分:1)
您可以设置菜单项的Command
属性:
mi.Command = ResubmitCommand;
默认情况下,ApplicationCommands.New
仅支持Ctrl+N
输入手势,并且通常绑定到主窗口。您可以将其绑定到左键单击菜单项:
mi.CommandBindings.Add(new CommandBinding(ApplicationCommands.New,Resubmit));
var leftClickGesture= new MouseGesture(MouseAction.LeftClick);
mi.InputBindings.Add(new InputBinding(ApplicationCommands.New, leftClickGesture));
答案 1 :(得分:0)
行:
m.Items.Add(new MenuItem());
mi = (MenuItem)m.Items[0];
应改为:
m.Items.Add(mi);