Еще одна возможность рассмотреть:
TreeView пытается сделать невозможным одновременный выбор двух TreeViewItems в дереве, поэтому это должно предотвратить это. Возможно, это ошибка в TreeView, но это также может быть проблемой при использовании TreeView.
Ради эффективности TreeView очень требователен к тому, как он находит TreeViewItems под ним. Алгоритм эффективно это (сделано в инкрементном режиме):
- Посмотри среди моих контейнеров предметов для объектов TreeView
- Посмотрите среди контейнеров элементов этих объектов TreeView для большего количества объектов TreeView
- Повторяйте шаг 3, пока не будет найдено больше объектов TreeView
Из-за этого TreeView может найти своих потомков, только если каждый уровень TreeViewItems находится непосредственно под предыдущим.
Например, это будет работать:
<TreeView>
<TreeViewItem>
<TreeViewItem />
</TreeViewItem>
...
</TreeView>
и так будет:
<HierarchicalDataTemplate TargetType="{x:Type MyItemType"} ItemsSource="{Binding subItems}">
...
</HierarchicalDataTemplate>
<TreeView ItemsSource="{Binding items}" />
Но это не будет работать, если вставлены не TreeViewItems, например:
<TreeView>
<TreeViewItem>
<Border>
<TreeViewItem/>
</Border>
</TreeViewItem>
</TreeView>
или это:
<TreeView>
<DockPanel>
<TreeViewItem>
<TreeViewItem/>
</TreeViewItem>
</DockPanel>
</TreeView>
Эти два последних случая будут отображаться очень хорошо, но TreeView не будет видеть TreeViewItems, поэтому его код выбора будет отключен. Это вызвало бы описанные вами симптомы.
Я не знаю, так ли это в вашем случае или нет, но я подумал, что должен упомянуть об этом на всякий случай.