Windows phone 7 我可以从WP7中的ContextMenu中删除MenuItem吗
我正在寻找一种方法——如果可能的话——从WindowsPhone7的ContextMenu中删除MenuItem控件 以下是我的XAML的简化版本:Windows phone 7 我可以从WP7中的ContextMenu中删除MenuItem吗,windows-phone-7,data-binding,listbox,contextmenu,windows-phone-7.1,Windows Phone 7,Data Binding,Listbox,Contextmenu,Windows Phone 7.1,我正在寻找一种方法——如果可能的话——从WindowsPhone7的ContextMenu中删除MenuItem控件 以下是我的XAML的简化版本: <ListBox> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> [ -- Content -- ] <toolkit:ContextMenuService.Conte
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
[ -- Content -- ]
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="view attributes" Tag="ATTRIBUTES" Click="ViewSelectedResultAttributes" />
<toolkit:MenuItem Header="view groups" Tag="GROUPS" Click="ViewSelectedResultGroups" />
<toolkit:MenuItem Header="view webpage" Tag="ONLINE" Click="ViewWebPage" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
[--内容--]
现在,并非绑定集合中的所有项目都有与其关联的网站,对于这些项目,我希望删除带有在线标记的菜单项(即最后一个菜单项)
但我找不到实现这一目标的方法
我还想过以编程方式添加ContextMenu和所有MenuItems,这样我就可以有条件地添加每个MenuItem,但似乎找不到OnItemDataBinding或OnDataBinding等事件
有人能帮我吗
更新:更具体地说,我不想从列表框中每个绑定项的ContextMenu中删除MenuItem,我只想在绑定对象出现故障时删除列表框中特定项的MenuItem
假设我的列表框包含3个绑定项:
清单项目1,
清单项目2,
清单项目3
现在,假设绑定到ListItem_2的对象的一个属性为NULL;在这种情况下,ListItem_2应删除其ContextMenu中的一个MenuItem控件,而ListItem_1和ListItem_3仍应具有此MenuItem
理想的情况是一个事件,它允许我在绑定每个项目时捕获每个项目,并公开ContextMenu。ListBox.Items集合只返回我分配给数据源的相同对象集合,而ListBoxItems集合(例如ListBoxItems)则更有用-是否存在此集合?首先,为上下文菜单指定一个名称,以便能够从后面的代码中轻松检索它:
<toolkit:ContextMenu x:Name="ContextMenu">
谢谢你的回复,库奇。但是,我想从一些(而不是所有)绑定项中删除MenuItem。我知道如何简单地删除菜单项;我希望在这里实现的是有条件地呈现/删除列表框中每个绑定项的菜单项。换句话说,有些绑定项有,有些绑定项没有。我添加了加载的事件并插入了代码,但无法获取ContextMenu:我怀疑这是因为集合中的每个绑定项都有ContextMenu实例。我已将原始问题修改为更具体的问题。使用事件时,
sender
包含触发事件的对象。在你的例子中,上下文菜单。只需投射sender
来检索它:var contextMenu=(contextMenu)sender代码>明白了!很抱歉,KooKiz,我误读了您之前的评论,之前已将加载的事件添加到列表框,而不是ContextMenu。一旦我把它读好,一切就都明白了。谢谢
var item = this.ContextMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == "ONLINE");
this.ContextMenu.Items.Remove(item);