2017-07-05 26 views
0

ユーザーが同じアイテムを再びクリックすると、ListBoxのアイテムの選択を解除したいと考えています。 ListBoxesで誰もが使用するSelectionChangedイベントがありますが、これは選択が変更されていない場合には発生しません。C#リストボックスの選択変更されていないイベント?

また、Clickイベントもありません。 Visual Studio C#2015にはこのようなイベントは含まれていません。

enter image description here

私はMouseLeftButtonDownイベントを使用して試してみましたが、ListBoxListBoxItemsが移入された後、このイベントはもう発生しません。さらに、私はListBoxItemsにマウスイベントをつけることを考えましたが、ListBoxを埋め込むたびにn個の新しいイベントを付けなければならないので、これは実用的ではありません。

誰にもこの問い合わせに対するXAMLソリューションがありますか?

+0

'SelectionMode =" Multiple "を設定すると、複数の項目を選択することができます。また、1回のクリックで項目を選択したり選択解除することもできます。 – Clemens

+1

@Clemensユーザーは複数のアイテムを選択できないはずですが、その答えに感謝します。 mm8の答えは、私が望んでいたように機能します。 –

+1

あなたが既にそれを知らない場合、 'Ctrl +クリック 'は、選択された項目を単一選択モード(および拡張モード)で選択解除します。これはおそらくアプリケーションのユーザーが期待しているかもしれません。 – Clemens

答えて

0

私はもともとの答えをMM8を選択したが、私は後でSelectedIndexPreviewMouseLeftButtonDownイベント、私は間接的問題のために求めていた機能の間に更新されていないことを学びました。このイベントを使用している場合は、実際には以前の最新のSelectedIndex値を取得します。

MouseLeftButtonUpイベントを使用した場合、実際にはMouseLeftButtonDownイベントと異なり、発生し、SelectedIndex変数の最新の値が取得されます。

気になる人は、System.Windows.ControlsListBoxバージョンです。 Systems.Windows.FormsListBoxの実装を試してみましたが、Controlsと違って、複数のラインをサポートしていないので、私はその考えを捨てました。

使用MouseLeftButtonUpイベントtldr

1

ListBoxコンテナのPreviewMouseLeftButtonDownイベントは、ここで説明したように処理できます。

How to disable deselection of items in ListView?

+0

このイベント関数の呼び出しの後に 'SelectedIndex'が更新されているようです。この機能内から現在選択されているアイテムインデックスを取得するにはどうしますか? –

関連する問題