WPF's ItemsControl will display a focus rectangle when it thinks it has focus and the user presses Tab or Alt.
But I recently had an ItemsControl display a focus rectangle even though it did not have focus -- one of its parents did. The ItemsControl was inside a UserControl, which was inside another UserControl that did have focus. Something like this:
<!-- 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>
Or, to show the nesting visually:
+---------------------------------------------------+
| UserControl1 (has focus) |
| |
| +-----------------------------------------------+ |
| | UserControl2 | |
| | | |
| | +-------------------------------------------+ | |
| | | ItemsControl (shows focus rectangle) | | |
It took me a while (and a StackOverflow question) to figure out where the focus rectangle was coming from, because I never expected a control that didn't have focus to show a focus rectangle.
I'm still learning my way around WPF, and obviously I don't know enough yet, or this wouldn't have confused me. Two questions to help me understand:
- Why does ItemsControl display a focus rectangle when it doesn't actually have focus, but one of its parent controls does? What's the reason for this feature? (I'm sure there is one -- maybe something to do with templates or visual trees? -- I just don't have a deep enough understanding of WPF mechanics and philosophy yet.)
- How does this work? What's the mechanism ItemsControl uses to decide that it should display a focus rectangle?