【问题标题】:How to trigger TreeView LostFocus event如何触发 TreeView LostFocus 事件
【发布时间】:2015-12-14 02:24:29
【问题描述】:

我有一个这样的 TreeView:

        <TreeView LostFocus="treeView_LostFocus">
            <TreeViewItem Selected="treeViewItem_select"/>
        </TreeView>

当我使用 treeViewItem_select 在 TreeViewItem 中选择不同的项目时,它总是首先触发事件 treeView_LostFocus。如何仅在TreeView失去焦点时才触发失去焦点事件,而不是在触发treeViewItem_select之前?

ps:把e.Handle = true加到treeViewItem_select的末尾好像不行。

【问题讨论】:

    标签: c# wpf treeview treeviewitem


    【解决方案1】:

    一种解决方案是检查 KeyboardFocus 是否仍在 TreeView 内。

    private void treeView_LostFocus(object sender, RoutedEventArgs e)
    {
        var tv = sender as TreeView;
    
        if (tv.IsKeyboardFocusWithin == false)
        {
            //Your code
        }
    }
    

    这样,当您的子项获得焦点时,您的代码将不会被执行。只有当整个 TreeView 失去焦点时。

    【讨论】:

    • 它有效。但是还有一个问题。当整个 TreeView 失去焦点时,我应该将选定的 treeviewitem 设为未选中,这样当我重新选择同一个 treeviewitem 时,我可以再次触发 select 事件。所以我只是把代码treeViewItem.IsSelected = false(treeViewItem 是xaml 中TreeViewItem 的名称),好像不行。我在某个地方错了吗?
    • 也许 MouseDoubleClick 事件是一个不错的选择。不知何故,我必须将其放入 Selected 事件中。
    • @Dragon 我认为使用 MouseDown 事件或 TreeViewItems 上的另一个 MouseClick 事件,您可以在其中重新选择项目或运行您想要的代码,可能会解决您的问题。但这是一个完全不同的问题。如果您仍然无法使其正常工作,我建议您创建另一个问题,在其中更完整地描述您的问题,准确地描述您想要实现的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多