В зависимости от желаемой семантики решение может быть очень простым:
Если корень вашего дерева не является TreeView
- например, если это простой ItemsControl
- все элементы TreeViewItems в дереве будут независимо выбираться, так что вы в основном получаете mulitiselect бесплатно. Так что просто используйте ItemsControl
вместо TreeView
для корня вашего дерева.
Преимущество этого решения состоит в том, что его очень просто реализовать. Он отличается от решения mattdlong тем, что:
- Его решение отменяет выбор всех других элементов при щелчке по элементу, поэтому вам нужно щелкнуть элементы, удерживая Ctrl, для множественного выбора.
- В этом решении одним щелчком мыши можно выбрать / отменить выбор элемента, на котором вы щелкнули, но нет возможности быстро выбрать элемент и одновременно отменить выбор всех остальных.
Другое отличие состоит в том, что навигация с помощью клавиатуры (клавиши со стрелками) в его решении отменяет выбор всех элементов, тогда как в этом решении навигация с помощью клавиатуры не отменяет выбор элементов.
Вы должны выбирать между этими решениями на основе предпочтительной семантики (один щелчок, чтобы добавить элемент, или Ctrl + щелчок, чтобы добавить элемент, и т. Д.). Если вам нужна более продвинутая семантика, такая как Shift-Click и т. Д., Это относительно добавить.
Обратите внимание, что вы также можете настроить стиль TreeViewItems, используя ToggleButton
или CheckBox
в любом месте ItemContainerTemplate
, имеющего Checked={Binding IsSelected}
. Это позволяет пользователю выбирать элементы, нажимая ToggleButton
или CheckBox
.
person
Ray Burns
schedule
19.01.2010