如果WPF ListBox在鼠标按钮按下时接收到MouseMove事件,它将更改ListBox的选择。也就是说,如果您在项目#1上单击鼠标,然后拖动到项目#2上,它将取消选择项目#1并选择项目#2。我该如何防止这种情况发生?
简短的版本是这样的:当用户双击我的ListBox中的项目时,我会对我的布局进行其他更改,包括在ListBox上方显示其他控件。这将使ListBox向下移动,这意味着鼠标现在位于与用户双击时不同的ListBoxItem上。
由于我响应DoubleClick事件(这是一个MouseDown事件)进行这些布局更改,因此当此布局更改完成时,鼠标按钮很可能仍被按下,这意味着WPF会发送MouseMove事件以ListBox为参考系(因为鼠标相对于ListBox的位置已经发生了变化)。ListBox将其视为拖动,并选择现在在鼠标下方的项目。
我不希望在我获得double-click事件和用户释放鼠标之间(这可能远远超出布局更改时间)选择发生变化。我怀疑实现这一点的最简单方法是禁用“拖动更改选择”行为,但我接受其他建议。
我如何在双击时“锁定”选择,并防止它在mouseup之前更改?
由于我响应DoubleClick事件(这是一个MouseDown事件)进行这些布局更改,因此当此布局更改完成时,鼠标按钮很可能仍被按下,这意味着WPF会发送MouseMove事件以ListBox为参考系(因为鼠标相对于ListBox的位置已经发生了变化)。ListBox将其视为拖动,并选择现在在鼠标下方的项目。
我不希望在我获得double-click事件和用户释放鼠标之间(这可能远远超出布局更改时间)选择发生变化。我怀疑实现这一点的最简单方法是禁用“拖动更改选择”行为,但我接受其他建议。
我如何在双击时“锁定”选择,并防止它在mouseup之前更改?
ParentSelector
将为null
。我们可以使用空值检查ParentSelector?.ReleaseMouseCapture()
来解决这个问题。 - J3soon