2010-08-24 14 views
5

Chcę przechwycić zdarzenie, gdy widok listy jest kliknięty lewym przyciskiem myszy na pustym polu - tj. Kliknięcie elementu bez elementu w kontrolce listview.Jak obsługiwać zdarzenie po kliknięciu w puste miejsce?

Szukałem na liście wydarzeń listy, ale nie znalazłem. Jak mogę to zrobić? Proszę o pomoc!

[Edytuj] Co chcę zrobić, jeśli złapię to wydarzenie: Odznacz wszystkie pozycje w widoku listy.

+0

Myślę, że to może być duplikat http://stackoverflow.com/questions/23133527/wpf-listbox-remove-selection-by-clicking-on-a-blank-spot – J3soon

Odpowiedz

0

ListBoxItem klamki sterujące klika na ListBox. Powinieneś albo:

  • użycie PreviewMouseDown wydarzenie w ListBox
  • Dodaj obsługi zdarzeń w kodzie poprzez myListBox.AddHandler metody

Zobacz How to Attach to MouseDown Event on ListBox przykłady wyjaśnieniu i kodu.

+0

Jako wzmianka dodatkowa: elementy obsłuży zdarzenia MouseDown, ale NIE zdarzenia MouseUp. W ten sposób otrzymasz zdarzenie MouseUp na liście ListBox/ListView, nawet gdy kliknięcie pojawi się na elemencie lub w pustym miejscu. –

5

Jeśli dołączasz program obsługi do zdarzenia MouseLeftButtonDown na liście ListView, będzie on uruchamiany tylko wtedy, gdy kliknięte zostaną obszary poza obiektem ListViewItem. Wszelkie kliknięcia wewnątrz przedmiotów będą obsługiwane przez same elementy, aby sterować zachowaniem wyboru ListView.

Możesz wprowadzać zmiany w klikalnych obszarach, zmieniając Tło ({x: Null} nie jest klikalne, cokolwiek innego jest) i Margines z ListViewItems, ustawiając ItemContainerStyle na ListView. Upewnij się również, że nie używasz pustego tła na liście ListView (biały jest domyślny, przezroczysty też działa).

0

Znalazłem, jeśli wcześniej raz kliknąłem na element w widoku listy (i tym samym zaznaczając go), a następnie dwa razy kliknąłem na puste miejsce w liście, aby zobaczyć niepożądany wynik działania poprzednio wybranego elementu, tak jakby był został dwukrotnie kliknięty (zamiast pustego miejsca). Aby obejść ten problem I używany następujący kod (vb.net):

Private Sub ListView1_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles ListView1.MouseLeftButtonDown 

    ListView1.SelectedIndex = -1 

End Sub 

z tego kodu w miejsce dwukrotne kliknięcie na pustej przestrzeni de-wybiera wszelkie poprzednio wybrane elementy i ma pożądany efekt niczego pojawiające się zdarzyć dla użytkownika, który dwukrotnie kliknie pusty obszar.

Powiązane problemy