在WPF应用程序中有一个Grid
与一些对象(它们是从一个自定义控件派生的)。我想使用上下文菜单上的每个人执行一些动作:如何在WPF上下文中引用右键单击的对象菜单项单击事件处理程序?
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
</ContextMenu>
</Grid.ContextMenu>
但在事件处理程序我不能知道哪些对象是右键单击:
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;
}
在那个注释行调试器说:未将对象引用设置为对象的实例。
请帮忙,我的代码有什么问题?
编辑(添加):
我试图做同样的,使用命令方法:
我宣布一个DataCommands
类具有RoutedUICommand Requery
,然后使用Window.CommandBindings
<Window.CommandBindings>
<CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
MenuItem的XAML现在看起来像:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Command="MyNamespace:DataCommands.Requery"/>
</ContextMenu>
</Grid.ContextMenu>
和事件处理程序是这样的:
private void RequeryCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
IInputElement parent = (IInputElement)LogicalTreeHelper.GetParent((DependencyObject)sender);
MyCustControl SCurrent = new MyCustControl();
SCurrent = (MuCustControl)parent;
string str = SCurrent.Name.ToString();// here I get the same error
MessageBox.Show(str);
}
但调试器显示相同的运行时错误:对象引用不设置到对象的实例。
我的两种方法都缺少什么?
我应该如何引用在WPF上下文菜单项右键单击事件处理程序?
我试着用命令的方式为更多的WPF十岁上下,但得到了同样的错误。我编辑了我的问题并添加了我的命令方法尝试的步骤。我对如何获得点击的对象引用的理解在这两种情况下都缺少一些东西 – rem 2010-01-09 11:50:17