c# – wpf listview右键单击问题

所以我附上一个上下文菜单(右键单击菜单)到一个wpf listview.

不幸的是,当您右键单击它将打开菜单并选择任何您结束的项目.有没有办法关闭这个右键选择行为,同时还允许上下文菜单

解决方法

关键是将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;
}

由于预览事件为tunneling,因此将阻止RightMouseButtonDown发生在ListViewItems上,从而阻止它们被选中,但不会阻止ListView上的RightMouseButtonDown,因此仍允许ContextMenu打开.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么