检测 ListBoxItem 何时处于 SelectedUnfocused 状态

Detect when a ListBoxItem is in the SelectedUnfocused state

问题

我希望我的列表框在用户单击它以外的任何地方时都取消选择全部()。

到目前为止我做了什么

以下代码适用于应用程序内的所有点击:

    private void ListBox_LostFocus(object sender, RoutedEventArgs e)
    {
        ((ListBox)sender).UnselectAll();
    }

单击列表框外的任何内容会导致它失去焦点,然后取消选择列表框内的所有内容。太棒了

但是,如果我单击主应用程序之外的某些内容 window,我不会从 ListBox 或 ListBoxItem 获得 LostFocus 事件。相反,ListBoxItem 进入 SelectedUnfocused 状态。据我所知,除了订阅 SelectedUnfocused 视觉状态情节提要的 storyboard.Completed 事件或监听 Window.Activated/Deactivated 之外,没有办法检测到这已经发生事件,然后通过 UI 将它们滴下来。我觉得我遗漏了一些明显的东西,如果可能的话,我想避免那种程度的黑客攻击。

问题

显然,WPF 能够检测到这种情况 - 它将控件置于正确的视觉状态 - 那么有没有一些干净的方法可以让我做同样的事情?

使用LostKeyboardFocus事件。 LostFocus 和 LostKeyboardFocus 是有区别的。

详情请见this question,可能有助于回答您的问题。