WPF, ошибка TreeView, невозможно выбрать корневой элемент после удаления элемента из дерева - PullRequest
0 голосов
/ 29 мая 2010

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

1 Ответ

0 голосов
/ 11 апреля 2011

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

[Изменить]

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

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

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

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

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

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

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

...