所以我将上下文菜单(右键单击菜单)附加到 wpf ListView 。
不幸的是,当您右键单击时,它会同时显示菜单和选择您结束的任何项目。有没有办法在仍然允许上下文菜单的情况下关闭这种右键单击选择行为?
最佳答案
关键是在正确的位置设置 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;
}
由于预览事件是 tunneling这将阻止 RightMouseButtonDown 发生在 ListViewItems 上,阻止它们被选中,但不会阻止 ListView 上的 RightMouseButtonDown,因此仍然允许打开 ContextMenu。
关于c# - wpf listview右键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075170/