C# 代码隐藏中的WPF Datagrid ContextMenu访问项

C# 代码隐藏中的WPF Datagrid ContextMenu访问项,c#,wpf,datagrid,contextmenu,C#,Wpf,Datagrid,Contextmenu,让我们假设我有一个这样的上下文菜单 <DataGrid.ContextMenu> ContextMenu Name="cmNewState" > <MenuItem Header="Test" IsCheckable="True" IsChecked="True" /> <CheckBox Content="CallerId" IsChecked="True" Unchecked="CheckBoxNewState_Unchecked

让我们假设我有一个这样的上下文菜单

<DataGrid.ContextMenu>
   ContextMenu Name="cmNewState" >
     <MenuItem Header="Test" IsCheckable="True" IsChecked="True" />
     <CheckBox Content="CallerId" IsChecked="True" Unchecked="CheckBoxNewState_Unchecked" Checked="CheckBoxNewState_Checked" />
     <CheckBox Content="CallerIdName" IsChecked="True" Unchecked="CheckBoxNewState_Unchecked" Checked="CheckBoxNewState_Checked"/>

ContextMenu Name=“cmNewState”>
如何访问ContextMenu中单个项后面的代码

cmNewState


非常感谢您的帮助

您也可以为ContextMenu中的项目命名:

<MenuItem Header="Test" IsCheckable="True" IsChecked="True" Name="MyNameHere" />

然后您可以在代码隐藏中使用该名称访问它们:
MyNameHere



通过访问ContextMenu中包含的Items集合也可以访问ContextMenu的元素,例如:
cmNewState.Items[index]

是的,但是如果我不想这样做的话!我正在寻找一种方法,我可以通过索引访问项目!我已经尝试过这个(cmNewState.Items[index]),但是我无法访问单个元素的属性,比如“IsChecked…”我知道了:我可以使用((System.Windows.Controls.CheckBox)(cmNewState.Items[j])通过这个liitle和平代码访问它。IsChecked=false;小心使用该代码,如果您将不可强制转换的项强制转换为复选框,您将得到一个异常。但是,这是我所知道的访问项的类型特定属性的唯一方法。我会用一个try-catch包起来以防万一(InvalidCastException)。。。根据情况,
DataGrid
是否可以在代码隐藏中访问?如果是这样,您可以循环
ContextMenu.Items
以获取单个项并执行您的操作…为什么要这样做?你能告诉我原因吗?也许有更好的方法来实现这一点。WPF不是设计成这样工作的。