【问题标题】:WPF Datagrid ContextMenu access Item in Code BehindWPF Datagrid ContextMenu 访问代码背后的项目
【发布时间】:2014-02-12 12:28:07
【问题描述】:

假设我有一个这样的 ContextMenu

<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 中的单个项目后面的代码中访问,例如

cmNewState............ ???

非常感谢您的帮助

【问题讨论】:

  • DataGrid 是否可以在后面的代码中访问?如果是这样,您可以循环 ContextMenu.Items 以获取单个项目并执行您的操作...
  • 你为什么要这样做?你能发布原因吗,可能有更好的方法来实现这一点。 WPF 不是为这样工作而设计的。

标签: c# wpf datagrid contextmenu


【解决方案1】:

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

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

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


也可以通过访问包含在 Contextmenu 中的 Items-collection 来访问 ContextMenu 的元素,例如:cmNewState.Items[index]

【讨论】:

  • 是的,没错,但如果我不想那样做!我正在寻找一种可以通过索引访问项目的方法!
  • 我试过这个(cmNewState.Items[index]),但我无法访问像“IsChecked....”这样的单个元素的属性
  • 我明白了:我可以通过代码的这种简单和平访问它 with((System.Windows.Controls.CheckBox)(cmNewState.Items[j])).IsChecked = false;
  • 请注意该代码,如果您将不可转换的项目转换为复选框,则会出现异常。然而,这是我知道的访问项目特定类型属性的唯一方法。我会在它周围加上一个 try-catch 以防万一(InvalidCastException)......视情况而定。
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
相关资源
最近更新 更多