当WPF的ItemsControl认为它具有焦点并且用户按Tab或Alt时,它将显示一个焦点矩形。为什么ItemsControl的父级重点时会显示焦点矩形?
但我最近有一个ItemsControl显示焦点矩形,尽管它没有焦点 - 其父母之一。 ItemsControl是在一个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 question),以找出其中的焦点矩形是从哪里来的,因为我从来没有期望一个没有焦点的控件显示焦点矩形。
我仍然在学习WPF的方法,显然我还不够了解,或者这不会让我困惑。两个问题要帮我明白了:
- 为什么不ItemsControl中显示焦点矩形时,它实际上并不具有焦点,但它确实父控件的一个?这个功能的原因是什么? (我确信有一个 - 可能与模板或可视化树有关? - 我只是没有深入了解WPF机制和哲学。)
- 如何这样做的吗? ItemsControl用什么机制来决定它应该显示一个焦点矩形?