w zależności od dokładnego semantyki jest pragnienie, rozwiązanie może być bardzo prosta:
Jeśli korzeń drzewa wcale nie jest TreeView
- na przykład, jeśli jest to zwykły ItemsControl
- wszystkie TreeViewItems w drzewie zostaną niezależnie zaznaczone, więc w zasadzie otrzymasz mulitiselect za darmo. Po prostu użyj ItemsControl
zamiast TreeView
dla katalogu głównego drzewa.
Rozwiązanie to ma tę zaletę, że jest wyjątkowo łatwe do wdrożenia. Różni się on od rozwiązania mattdlonga tym, że:
- Jego rozwiązanie odznacza wszystkie inne elementy po kliknięciu elementu, więc trzeba klikać elementy z naciśniętym klawiszem Ctrl do wielokrotnego wyboru.
- Za pomocą tego rozwiązania jedno kliknięcie wybierze/odznaczy wybraną pozycję, ale nie ma możliwości szybkiego wybrania elementu i jednoczesnego anulowania zaznaczenia wszystkich pozostałych.
Kolejną różnicą jest to, że nawigacja po klawiaturze (klawisze strzałek) w jego rozwiązaniu odznacza wszystkie elementy, podczas gdy w tym rozwiązaniu nawigacja po klawiaturze nie odznacza pozycji.
Powinieneś wybrać te rozwiązania w oparciu o preferowaną semantykę (jedno kliknięcie, aby dodać element do ctrl-kliknięcia, aby dodać element, itp.). Jeśli chcesz bardziej zaawansowanej semantyki, takiej jak Shift-Click, itp., Jest względnie do dodania.
Należy pamiętać, że można również niestandardowe TreeViewItems styl używając ToggleButton
lub CheckBox
gdziekolwiek w ItemContainerTemplate
który ma Checked={Binding IsSelected}
. To pozwala użytkownikowi wybrać elementy, klikając na ToggleButton
lub CheckBox
.
Spójrz na tej dyskusji: http://stackoverflow.com/questions/459375/customizing-the-treeview-to-allow-multi-select/9297158#9297158 –
Sprawdź moją odpowiedź tutaj: http://stackoverflow.com/a/13412801/166452 –