wpf listview右键单击问题

Kev*_*eus 9 c# wpf listview contextmenu right-click

所以我已经将一个上下文菜单(右键菜单)附加到wpf listview.

不幸的是,当你右键单击它时会显示菜单并选择你结束的任何项目.有没有办法在仍允许上下文菜单的同时关闭此右键单击选择行为?

rmo*_*ore 20

关键是将PreviewMouseRightButtonDown事件设置在正确的位置.正如您将注意到的,即使没有ContextMenu右键单击ListViewItem也会选择该项,因此我们需要在每个项目上设置事件,而不是在ListView上设置事件.

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <EventSetter Event="PreviewMouseRightButtonDown"
                         Handler="OnListViewItemPreviewMouseRightButtonDown" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Menu Item">Item 1</MenuItem>
            <MenuItem Header="Menu Item">Item 2</MenuItem>
        </ContextMenu>
    </ListView.ContextMenu>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
    <ListViewItem>Item</ListViewItem>
</ListView>
Run Code Online (Sandbox Code Playgroud)


private void OnListViewItemPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    Trace.WriteLine("Preview MouseRightButtonDown");

    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

由于预览事件是隧道,这将阻止在ListViewItems上发生RightMouseButtonDown,阻止它们被选中,但不会阻止ListView上的RightMouseButtonDown,因此仍然允许ContextMenu打开.