当 WPF 的 ItemsControl 认为它有焦点并且用户按下 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 使用什么机制来决定它应该显示一个焦点矩形?