我有一个带有Extended SelectionMode的ListView。默认情况下,当我按下左键时,它会选择一个项目,当我移动鼠标光标(慢慢地)时,它会移动选择(只要按钮仍然按下)。
由于我在列表顶部实现Drag and Drop,因此有点烦人。如何在鼠标按钮关闭时阻止它更改所选项目?我试过在PreviewMouseMove中说e.Handled = true但它没有帮助。
答案 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;
}
}