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>

現在、バインドされたコレクション内のすべてのアイテムにWebサイトが関連付けられているわけではありません。これらのアイテムについては、タグONLINEつまり最後のMenuItem)が付いたMenuItemを削除します。

しかし、私はこれを達成する方法を見つけることができません。

また、ContextMenuとすべてのMenuItemをプログラムで追加して、各MenuItemを条件付きで追加できるようにすることも考えましたが、OnItemDataBoundやOnDataBindingなどのイベントが見つからないようです。

誰かが私を助けることができますか?

更新:より具体的には、リストボックス内のすべてのバインドされたアイテムのContextMenuからMenuItemを削除したくありません。バインドされたオブジェクトが条件に失敗した場合にのみ、リストボックス内の特定のアイテムのMenuItemを削除したいと思います。

私のリストボックスに3つのバインドされたアイテムが含まれているとしましょう:ListItem_1、ListItem_2、ListItem_3

ここで、ListItem_2にバインドされたオブジェクトのプロパティの1つがNULLであるとします。この場合、ListItem_2ではContextMenuからMenuItemコントロールの1つを削除する必要がありますが、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 に答える