c# - wpf listview右键问题

标签 c# wpf listview contextmenu right-click

所以我将上下文菜单(右键单击菜单)附加到 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/

相关文章:

Android:在选项卡和返回之间切换时,ListView 烦人地滚动到顶部

c# - 使用 PCL 和 Xamarin 对 Azure 移动服务执行单元测试时程序集版本不匹配

c# - 以编程方式添加 Interaction.Behavior

c# - C# 中具有可变内容的字符串插值

c# - 在自动生成的 GridView WPF C# 中仅显示日期

wpf - 在 WPF 中使用 MonoGame

c# - 启动时动态决定Winforms还是Wpf?

android - 在 CustomCursor Adapter getView() 中获取正确的光标

c++ - 我的 ListView 没有在 Qt 中获得键盘焦点

c# - 由方法调用组成的简单 DSL 的 Lexer/Parser