当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 question)来确定焦点矩形的来源,因为我从没想过没有焦点的控件可以显示焦点矩形。
我还在学习WPF的方法,显然我还不知道,或者这不会让我感到困惑。两个问题可以帮助我理解:
答案 0 :(得分:1)
您确定ItemsControl没有焦点吗?如果它正在绘制焦点矩形,它应该。仅仅因为视觉树中较高的控件是聚焦的,并不意味着它的一个孩子也没有集中注意力。要了解原因,请确保您已经了解了WPF中“逻辑焦点”和“键盘焦点”之间的区别。 MSDN上有一个exaustive explanation。
答案 1 :(得分:0)
我认为这是设计上的。我的理解是焦点从父控件继承而来,沿着可视树工作。尝试检查itemscontrol父级的视觉样式,然后检查itemscontrol本身,以查看xaml的可视树正在进行的操作。这应该揭示一些正在发生的事情的线索。此外,您可以尝试搜索谷歌和其他一些网站上的焦点和项目控制等信息。可能还有一些其他信息提供了更多详细信息,说明所有工作的方式比我能解释的更清楚。如果单击itemscontrol然后单击其他位置然后单击父项,会发生什么?焦点有什么变化吗?您还可以尝试创建一个覆盖焦点的自定义类,并使其成为控件不会以相同的方式显示焦点。应该(相当)容易做到。某些网站/博客上可能有相关信息。