wpf listview проблема правого клика

Поэтому я прикрепил контекстное меню (контекстное меню) к списку wpf.

к сожалению, когда вы щелкаете правой кнопкой мыши, он вызывает меню и выбирает любой пункт, над которым вы находитесь. Есть ли способ отключить это поведение при щелчке правой кнопкой мыши, но при этом разрешить контекстное меню?

2 ответа

Решение

Ключ устанавливает событие PreviewMouseRightButtonDown в правильном месте. Как вы заметите, даже без ContextMenu щелчок правой кнопкой мыши на 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 и, таким образом, позволяет открывать ContextMenu.

Эта ссылка также кажется полезной:

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

Другие вопросы по тегам