【发布时间】:2010-11-19 15:39:11
【问题描述】:
我有一个带有扩展选择模式的 ListView。默认情况下,当我按下左键时,它会选择一个项目,当我(缓慢)移动鼠标光标时,它会移动选择(只要按钮仍然按下)。
由于我在列表顶部实现拖放,它变得有点烦人。当鼠标按钮按下时,如何防止它更改所选项目?我尝试在 PreviewMouseMove 中说 e.Handled=true 但没有帮助。
【问题讨论】:
标签: wpf listview mouseevent
我有一个带有扩展选择模式的 ListView。默认情况下,当我按下左键时,它会选择一个项目,当我(缓慢)移动鼠标光标时,它会移动选择(只要按钮仍然按下)。
由于我在列表顶部实现拖放,它变得有点烦人。当鼠标按钮按下时,如何防止它更改所选项目?我尝试在 PreviewMouseMove 中说 e.Handled=true 但没有帮助。
【问题讨论】:
标签: wpf listview mouseevent
更新
最后一个解决方案不起作用。这是禁用鼠标移动选择的两个事件的组合。问题是,在选择已选择的项目时(出现未选择的选项),那么我们仍然可以向上或向下移动鼠标以更改选择。我发现解决这个问题的唯一方法是欺骗 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;
}
}
【讨论】: