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

Vit*_*lik 1 wpf listview mouseevent

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

由于我在列表顶部实施拖放,因此有点烦人。当鼠标按钮按下时,如何防止它更改所选项目?我试图在 PreviewMouseMove 中说 e.Handled=true 但它没有帮助。

Fre*_*lad 5

更新
最后一个解决方案不起作用。这是禁用鼠标移动选择的两个事件的组合。The problem is that when selecting an already selected item (no SelectionChanged occurs) then we can still move the mouse up or down to change the selection. 我发现解决这个问题的唯一方法是欺骗 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>
Run Code Online (Sandbox Code Playgroud)

在 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;
    }
}
Run Code Online (Sandbox Code Playgroud)