WPF列表视图中单击鼠标右键问题(wpf listview right-click problem)

2019-06-24 19:29发布

所以我重视上下文菜单(右键菜单),以一个WPF列表视图。

不幸的是,当你右键点击它会弹出菜单,你在任何项目同时选择 。 有没有一种方法来关闭这个右键单击选择的行为,同时还允许在上下文菜单?

Answer 1:

关键是设定在正确的地方的PreviewMouseRightButtonDown事件。 正如你会发现,即使没有一个文本菜单右键点击一个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防止它们被选中发生阻塞RightMouseButtonDown,但不能防止对ListView中RightMouseButtonDown等仍允许文本菜单打开。



Answer 2:

这个环节也似乎有所帮助:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/e7f213e3-d8c0-4d13-8c39-51b214715c8a



文章来源: wpf listview right-click problem