Вопрос

итак, я прикрепил контекстное меню (контекстное меню, вызываемое правой кнопкой мыши) к wpf listview.

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

Это было полезно?

Решение

Ключ заключается в установке события 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top