WPF, ошибка TreeView, невозможно выбрать корневой элемент после удаления элемента из дерева

У меня есть очень странная ошибка в трехуровневом TreeView. Это прерывисто, и я не могу найти, как воспроизвести это последовательно. После программного удаления, добавления, а затем удаления некоторых элементов третьего уровня, когда я нажимаю на корневой элемент, он не выбирается. Он по-прежнему может разворачиваться / разворачиваться, но не может быть выбран щелчком мыши и не вызывает событие ItemSelectionChange. Вы можете щелкнуть, чтобы выбрать элементы второго уровня или третьего уровня, и после этого вы, наконец, сможете выбрать корневой элемент. Я попытался установить IsSelected = false для всех элементов после удаления и попытался сделать хорошую очистку при удалении элементов, но это не помогло. Кто-нибудь сталкивался с этой ошибкой? Есть ли у вас какие-либо предложения, чтобы удалить эту ошибку?

1 ответ

Бывает со мной после программной настройки узла IsSelected на узел. Тогда я не могу нажать, чтобы выбрать предыдущий узел.

[Редактировать]

Наконец-то разобрался, что происходит. Кажется, недостаточно установить свойство IsSelected, потому что внутренняя логическая фокусировка дерева остается на старом выбранном элементе.

Событие было отправлено элементу дерева, но, поскольку оно уже имело внутреннюю логическую фокусировку, оно не вызвало изменение фокуса (откуда, как я подозреваю, дерево знает, когда следует изменить выбранный элемент).

Если я вызываю focus на узле дерева, для которого я установил IsSelected в true, он работает нормально.

====================

Вы устанавливаете IsSelected на true для новых добавленных элементов? Если так, также сделайте фокус, как это:

DependencyObject nodeVisualContainer = mTreeControl.ItemContainerGenerator.ContainerFromItem(nodeToSelect);
            if (nodeVisualContainer is UIElement)
                ((UIElement)nodeVisualContainer).Focus();

Примечание: это только логически сфокусировано на элементе. Фокус клавиатуры не будет затронут.

Другие вопросы по тегам