WPF ListView右键问题

9

我已经给WPF列表视图附加了上下文菜单(右键菜单)。

不幸的是,当您右键单击时,它会弹出菜单并选择您所在的任何项目。有没有办法关闭此右键选择行为,同时仍允许上下文菜单?

1个回答

23

关键是在正确的位置设置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>


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

    e.Handled = true;
}

由于预览事件是隧道的,这将阻止右键单击ListViewItems的发生从而防止它们被选中,但不会阻止ListView上的RightMouseButtonDown,因此仍然允许ContextMenu打开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接