2009-05-04 44 views
1

当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的方法,显然我还不够了解,或者这不会让我困惑。两个问题要帮我明白了:

  1. 为什么不ItemsControl中显示焦点矩形时,它实际上并不具有焦点,但它确实父控件的一个?这个功能的原因是什么? (我确信有一个 - 可能与模板或可视化树有关? - 我只是没有深入了解WPF机制和哲学。)
  2. 如何这样做的吗? ItemsControl用什么机制来决定它应该显示一个焦点矩形?

回答

1

你确定ItemsControl没有焦点吗?如果它正在绘制焦点矩形,它应该。仅仅因为视觉树中的控制力较高,并不意味着它的一个孩子也没有专注。要理解为什么,请确保您已经学习了WPF中“逻辑焦点”和“键盘焦点”之间的区别。 MSDN上有一个exaustive explanation

0

我认为这是设计。我的理解是,重点是从父控制继承,并沿着视觉树向下。尝试检查项目控制父项的视觉风格,然后检查项目控件本身,以查看xaml的可视化树正在发生什么。这应该揭示一些关于发生的事情的线索。此外,您可以尝试在Google和其他网站上搜索焦点和项目控制等信息。可能还有其他一些信息,这些信息提供了有关如何将所有作品比我可以如何解释更详细的信息。如果你点击itemscontrol然后点击其他地方,然后点击父项,会发生什么?任何焦点改变?你也可以尝试制作一个覆盖焦点的自定义类,并使其成为控件不会以同样的方式显示焦点。应该(相当)容易。在某些网站/博客上可能会有这方面的信息。

相关问题