Запрет ListView от изменения выделения, когда мышь перемещается с помощью кнопки вниз - PullRequest
1 голос
/ 19 ноября 2010

У меня есть ListView с расширенным режимом выбора.По умолчанию, когда я нажимаю левую кнопку вниз, он выбирает элемент, а когда я перемещаю курсор мыши (медленно), он перемещает выделение (пока кнопка еще не нажата).

Поскольку я использую Drag andПадение вверху списка становится немного раздражающим.Как я могу предотвратить изменение выбранного элемента, когда кнопка мыши нажата?Я пытался сказать e.Handled = true в PreviewMouseMove, но это не помогло.

1 Ответ

4 голосов
/ 19 ноября 2010

Обновление
Последнее решение не работало. Это комбинация из двух событий, которая отключает выбор перемещения мыши. Проблема заключается в том, что при выборе уже выбранного элемента (не существует SelectionChanged), мы все равно можем перемещать мышь вверх или вниз, чтобы изменить выбор. Единственный способ обойти это - обманом ListView снова выбрать тот же элемент. Это может быть неудобно, если у вас изменились функциональные возможности выбора, но в противном случае это, кажется, сделает работу.

<ListView SelectionMode="Extended"
            Name="listView">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <EventSetter Event="Selected" Handler="listViewItem_Selected"/>
            <EventSetter Event="PreviewMouseDown" Handler="listViewItem_PreviewMouseDown"/>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

А в EventHandlers

void listViewItem_Selected(object sender, RoutedEventArgs e)
{
    listView.ReleaseMouseCapture();
}
private void listViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    ListViewItem listViewItem = sender as ListViewItem;
    if (listViewItem.IsSelected == true)
    {
        // Unselecting the item in the Preview event
        // "tricks" the ListView into selecting it again
        listViewItem.IsSelected = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...