ItemsControl WPF будет отображать прямоугольник фокуса, когда он думает, что он имеет фокус, и пользователь нажимает Tab или Alt.
Но недавно у меня был элемент ItemsControl, отображающий прямоугольник фокуса, хотя у него не было фокуса - это сделал один из его родителей. ItemsControl находился внутри UserControl, который находился внутри другого UserControl, действительно в фокусе. Что-то вроде этого:
<!-- UserControl1.xaml; this is the control that has focus -->
<UserControl x:Class="UserControl1" Focusable="True" ...>
<UserControl2/>
</UserControl>
<!-- UserControl2.xaml -->
<UserControl x:Class="UserControl2">
<ItemsControl .../>
</UserControl>
Или, чтобы визуально показать гнездование:
+---------------------------------------------------+
| UserControl1 (has focus) |
| |
| +-----------------------------------------------+ |
| | UserControl2 | |
| | | |
| | +-------------------------------------------+ | |
| | | ItemsControl (shows focus rectangle) | | |
Мне потребовалось некоторое время (и вопрос StackOverflow), чтобы выяснить, где Прямоугольник фокуса исходил из, потому что я никогда не ожидал, что элемент управления, у которого нет фокуса, покажет прямоугольник фокуса.
Я все еще изучаю WPF и, очевидно, еще недостаточно знаю, иначе это бы меня не смутило. Два вопроса, которые помогут мне понять:
- Почему ItemsControl отображает прямоугольник фокуса, когда на самом деле у него нет фокуса, но есть у одного из его родительских элементов управления? В чем причина этой функции? (Я уверен, что есть один - может быть, что-то связанное с шаблонами или визуальными деревьями? - Просто у меня еще нет достаточно глубокого понимания механики и философии WPF.)
- Как это работает? Какой механизм использует ItemsControl, чтобы решить, что он должен отображать прямоугольник фокуса?