所以我已附加的上下文菜单(右击菜单)一个WPF列表视图。

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

有帮助吗?

解决方案

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

由于预览事件是隧道这将阻止从RightMouseButtonDown发生在ListViewItems防止它们被选择,但不能防止RightMouseButtonDown上ListView和所以仍允许文本菜单打开。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top