我想实现拖动和放大为扩展选择模式WPF ListBox
删除。到目前为止,一切正常:
我基本上实现了它as written here - 简而言之:
PreviewMouseLeftButtonDown
以存储当前鼠标位置MouseMove
以启动拖动操作现在我的问题是:通常,在资源管理器中,我选择要拖动的项目,然后我释放鼠标按钮,再次按下< / strong>发起阻力&amp;放下操作。我猜这是大多数用户会这样做的。当我在我的应用程序中执行相同的操作时,选择更改为项目我第二次按下鼠标按钮 - 多选择已经消失。
昨天我搜索了很多,但我能找到的所有解决方案都在PreviewMouseLeftButtonDown
启动了拖动操作。但是,这不允许我检查鼠标是否已经移动到足以实际启动拖动操作。
我的问题:有没有人有一个简单的解决方案(不涉及任何第三方库)如何更改上面链接的样本,以便多选择保持不变?
答案 0 :(得分:3)
问题在于ListBox
或ListView
的选择模式与用于资源管理器的选择模式不同:
对于具有扩展选择模式的ListBox
:
用户只需使用MouseDown取消选择项目;
而对于资源管理器:
用户无法仅使用MouseDown取消选择项目,只能在MouseUp之前执行此操作。
这就是为什么在资源管理器中,用户可以选择一个项目,释放鼠标,然后再次按下它以启动拖动&amp;下降。
为了实现类似资源管理器的选择和拖放效果,您需要首先区分MouseDown时是否选择了某个项目,因此当项目IsSelected
推迟时,它的选择会发生变化,直到的MouseUp。
您可以查看this article以获取更多想法,以下是您的原型:
private void ListBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (VisualTreeHelper.GetParent(e.OriginalSource as UIElement) is ListBoxItem)
{
ListBoxItem item = (ListBoxItem)VisualTreeHelper.GetParent(e.OriginalSource as UIElement);
if (item == null) return;
if (item.IsSelected)
{
e.Handled = true;
}
}
}