wpf listview right-click problem

后端 未结 1 917
难免孤独
难免孤独 2020-12-10 05:57

so I have attached a context menu (right-click menu) to a wpf listview.

unfortunately, when you right-click it brings up both the menu and selects whatever

相关标签:
1条回答
  • 2020-12-10 06:51

    The key is setting the PreviewMouseRightButtonDown event in the correct place. As you'll notice, even without a ContextMenu right clicking on a ListViewItem will select that item, and so we need to set the event on each item, not on the 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;
    }
    

    Since the preview events are tunneling this will block the RightMouseButtonDown from occurring on the ListViewItems preventing them from being selected, but not prevent the RightMouseButtonDown on the ListView and so still allow the ContextMenu to open.

    0 讨论(0)
提交回复
热议问题