ListBoxItems上的WPF上下文菜单

ListBoxItems上的WPF上下文菜单,wpf,listbox,Wpf,Listbox,我想我首先会说我的WPF程序有一个列表框。显然,其中包含一些ListBoxItems。每个ListBoxItem都填充有数据,其中一些ListBoxItem比其他的更宽或更窄 为了给ListBoxItem提供上下文菜单,我在ListBoxItem的数据模板周围放置了一个边框,并将上下文菜单附加到该边框上。它工作得很好,但有一个障碍。让我给你看一张图片来说明: 因此,您可以在这里看到顶部的项目中有两个项目。这些物品有黑色边框,在这张图片中,第一个被选中。但是,正如您所看到的,蓝色选择区域大于项目

我想我首先会说我的WPF程序有一个列表框。显然,其中包含一些ListBoxItems。每个ListBoxItem都填充有数据,其中一些ListBoxItem比其他的更宽或更窄

为了给ListBoxItem提供上下文菜单,我在ListBoxItem的数据模板周围放置了一个边框,并将上下文菜单附加到该边框上。它工作得很好,但有一个障碍。让我给你看一张图片来说明:

因此,您可以在这里看到顶部的项目中有两个项目。这些物品有黑色边框,在这张图片中,第一个被选中。但是,正如您所看到的,蓝色选择区域大于项目本身(由黑色边框表示)。现在,外部区域可以选择ListBoxItem,但如果我右键单击该额外区域,它当然不会给我该项目的上下文菜单

我认为我的方法有点错误,因为这会让用户感到困惑。我只是想知道还有什么更好的方法,我希望这里的人能帮我


谢谢。

您可以将上下文菜单附加到listboxitem本身。 大致:


.....
或者您可以将contextmenu放在列表框本身上:

<ListBox>
    <ListBox.ContextMenu>
        <ContextMenu>
            ...
        </ContextMenu>
    </ListBox.ContextMenu>

...
你可能会想。。。啊,但是我怎么知道他们点击了哪一项呢。 这将被选中。 您可以绑定selecteditem并使用它。 您没有询问如何绑定或类似的问题,但您可能会发现在列表框或窗口的资源中定义contextmenu是最简单的。这样,它就位于窗口的datacontext中,您可以绑定到它的viewmodel中的命令

<ListBox>
    <ListBox.ContextMenu>
        <ContextMenu>
            ...
        </ContextMenu>
    </ListBox.ContextMenu>