0

我正在寻找一种方法——如果可能的话——从 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 (最后一个 MenuItem)。

但我找不到实现这一目标的方法。

我还考虑过以编程方式添加 ContextMenu 和所有 MenuItem,以便有条件地添加每个 MenuItem,但我似乎找不到诸如 OnItemDataBound 或 OnDataBinding事件。

谁能帮我吗?

更新:更具体地说,我不想从ListBox 中每个绑定项目的 ContextMenu 中删除 MenuItem,我只想在绑定对象不符合条件时删除 ListBox中特定项目上的 MenuItem。

假设我的 ListBox 包含 3 个绑定项:ListItem_1、ListItem_2、ListItem_3

现在,假设绑定到 ListItem_2 的对象的属性之一为 NULL;在这种情况下,ListItem_2 应从其 ContextMenu 中删除其中一个 MenuItem 控件,而 ListItem_1 和 ListItem_3 仍应具有此 MenuItem。

理想的是一个事件,它允许我在绑定每个项目时捕获它,并且它还公开 ContextMenu。ListBox.Items 集合只是返回我指定为数据源的相同对象集合,而 ListBoxItems 的集合会更有用 - 这是否存在?

4

1 回答 1

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);
于 2012-08-22T18:56:24.873 回答