【问题标题】:Why does ItemsControl show a focus rectangle when its parent is focused?为什么 ItemsControl 在其父级获得焦点时显示焦点矩形?
【发布时间】:2009-05-04 13:35:21
【问题描述】:

当 WPF 的 ItemsControl 认为它有焦点并且用户按下 Tab 或 Alt 时,它会显示一个焦点矩形。

但我最近有一个 ItemsControl 显示一个焦点矩形,即使它没有焦点——它的一个父项有。 ItemsControl 位于 UserControl 内部,而该 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,显然我还不够了解,否则这不会让我感到困惑。两个问题可以帮助我理解:

  1. 为什么 ItemsControl 在它实际上没有焦点时显示一个焦点矩形,但它的父控件之一有?这个功能的原因是什么? (我确定有一个——可能与模板或可视化树有关?——我只是对 WPF 机制和哲学还没有足够深入的了解。)
  2. 如何这是如何工作的? ItemsControl 使用什么机制来决定它应该显示一个焦点矩形?

【问题讨论】:

    标签: wpf focus itemscontrol focusvisualstyle


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多