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, чтобы решить, должен ли он отображать прямоугольник фокуса?