0

问题

每当用户单击它之外的任何地方时,我都希望我的列表框 UnselectAll() 。

到目前为止我所做的

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

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

单击列表框外的任何内容都会使其失去焦点,然后取消选择里面的所有内容。伟大的。

但是,如果我单击应用程序主窗口外的某些内容,则不会从 ListBox 或 ListBoxItem 获得 LostFocus 事件。相反,ListBoxItem 进入 SelectedUnfocused 状态。据我所知,除了订阅 Storyboard.Completed 的 SelectedUnfocused 视觉状态故事板的事件,或者侦听 Window.Activated/Deactivated 事件,然后通过用户界面。我觉得我遗漏了一些明显的东西,如果可能的话,我想避免那种程度的骇客。

问题

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

4

1 回答 1

1

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

有关详细信息,请参阅此问题,因为它可能有助于回答您的问题。

于 2015-05-07T21:42:34.037 回答