相关疑难解决方法(0)

如何在WPF上下文菜单项单击事件处理程序中引用右键单击的对象?

在WPF应用程序中,有一个Grid包含许多对象(它们来自自定义控件).我想使用上下文菜单对每个操作执行一些操作:

   <Grid.ContextMenu>
     <ContextMenu>
       <MenuItem  Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
     </ContextMenu>                   
   </Grid.ContextMenu> 
Run Code Online (Sandbox Code Playgroud)

但是在事件处理程序中,我无法知道哪些对象被右键单击:

    private void EditStatusCm_Click(object sender, RoutedEventArgs e)
    {
        MyCustControl SCurrent = new MyCustControl();
        MenuItem menu = sender as MenuItem;
        SCurrent = menu.DataContext as MyCustControl; // here I get a run-time error
        SCurrent.Status = MyCustControl.Status.Sixth;
    }
Run Code Online (Sandbox Code Playgroud)

在该注释行上调试器说:对象引用未设置为对象的实例.

请帮忙,我的代码有什么问题?

编辑(补充):

我尝试使用Command方法做同样的事情:

我宣布了一个DataCommands类,RoutedUICommand Requery然后使用Window.CommandBindings

<Window.CommandBindings>
  <CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)

MenuItem的XAML现在看起来像:

<Grid.ContextMenu>
 <ContextMenu>
  <MenuItem  Name="EditStatusCm" Header="Change status"  Command="MyNamespace:DataCommands.Requery"/>
 </ContextMenu>                   
</Grid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)

事件处理程序如下所示:

    private void RequeryCommand_Executed(object …
Run Code Online (Sandbox Code Playgroud)

c# wpf contextmenu event-handling

10
推荐指数
2
解决办法
4万
查看次数

标签 统计

c# ×1

contextmenu ×1

event-handling ×1

wpf ×1