マウス ボタンが押されている間に WPF ListBox が MouseMove イベントを取得すると、リストボックスの選択が変更されます。つまり、アイテム #1 でマウスをクリックしてアイテム #2 の上にドラッグすると、アイテム #1 の選択が解除され、代わりにアイテム #2 が選択されます。どうすればこれを防ぐことができますか?
それがショートバージョンです。少し長いバージョンは次のとおりです。ユーザーが ListBox 内の項目をダブルクリックすると、ListBox の上に他のコントロールを表示するなど、レイアウトに他の変更を加えます。これにより、ListBox が下に移動します。つまり、マウスは、ユーザーがダブルクリックしたときとは異なる ListBoxItem の上に配置されます。
DoubleClick イベント (マウスダウン イベント) に応答してこれらのレイアウト変更を行っているため、このレイアウト変更が完了したときにマウス ボタンが押されたままになる可能性が非常に高くなります。つまり、WPF は ListBox に MouseMove イベント ( ListBox に対するマウスの位置が変更されたため)。ListBox はこれをドラッグとして扱い、現在マウスの下にあるイベントを選択します。
ダブルクリックイベントを取得してからユーザーがマウスを離すまでの間に選択を変更したくありません (レイアウトが変更された後かもしれません)。これを実現する最も簡単な方法は、「ドラッグ時に選択を変更する」動作を無効にすることだと思いますが、他の提案も受け付けています。
ダブルクリックで選択を「ロック」し、マウスアップまで変更できないようにするにはどうすればよいですか?