使用按钮向下移动鼠标时,防止ListView更改选择

时间:2010-11-19 15:39:11

标签: wpf listview mouseevent

我有一个带有Extended SelectionMode的ListView。默认情况下,当我按下左键时,它会选择一个项目,当我移动鼠标光标(慢慢地)时,它会移动选择(只要按钮仍然按下)。

由于我在列表顶部实现Drag and Drop,因此有点烦人。如何在鼠标按钮关闭时阻止它更改所选项目?我试过在PreviewMouseMove中说e.Handled = true但它没有帮助。

1 个答案:

答案 0 :(得分:4)

<强>更新
最后一个解决方案无效。这是禁用鼠标移动选择的两个事件的组合。问题是,当选择已经选择的项目(没有发生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;
    }
}