我正在寻找一种方法 - 如果可能的话 - 从Windows Phone 7中的ContextMenu中删除一个MenuItem控件。
以下是我的XAML的简化版本:
<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>
现在,并非绑定集合中的所有项目都有与之关联的网站,对于那些我希望删除带有 ONLINE 标签的MenuItem的项目( ie 最后一个MenuItem)。
但我无法找到实现这一目标的方法。
我还想过以编程方式添加ContextMenu和所有MenuItems,这样我就可以有条件地添加每个MenuItem,但我似乎找不到像OnItemDataBound或OnDataBinding,等这样的事件。
任何人都可以帮助我吗?
更新:更具体一点,我不想从ListBox中每个绑定项上的ContextMenu中删除MenuItem,我只想删除特定的MenuItem 当绑定对象失败时,ListBox中的项目。
假设我的ListBox包含3个绑定项: ListItem_1, ListItem_2, ListItem_3
现在,假设绑定到ListItem_2的对象的一个属性为NULL;在这种情况下,ListItem_2应该删除其ContextMenu中的一个MenuItem控件,而ListItem_1和ListItem_3应该仍然具有此MenuItem。
什么是理想的事件,它允许我捕获每个项目,因为它被绑定,并暴露ContextMenu。 ListBox.Items集合只返回我指定为数据源的相同对象集合,而ListBoxItems的集合会更有用 - 这是否存在?
答案 0 :(得分:2)
首先,为您的上下文菜单命名,以便能够从代码隐藏中轻松检索它:
<toolkit:ContextMenu x:Name="ContextMenu">
从那里,您可以使用this.ContextMenu.Items
访问这些项目。所以只需删除不再需要的那些:
var item = this.ContextMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == "ONLINE");
this.ContextMenu.Items.Remove(item);