Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何触发TreeView LostFocus事件_C#_Wpf_Treeview_Treeviewitem - Fatal编程技术网

C# 如何触发TreeView LostFocus事件

C# 如何触发TreeView LostFocus事件,c#,wpf,treeview,treeviewitem,C#,Wpf,Treeview,Treeviewitem,我有一个这样的树视图: <TreeView LostFocus="treeView_LostFocus"> <TreeViewItem Selected="treeViewItem_select"/> </TreeView> 当我使用TreeViewItem\u select在TreeViewItem中选择不同的项目时,它总是首先触发事件treeView\u LostFocus。仅当TreeView

我有一个这样的树视图:

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

当我使用
TreeViewItem\u select
在TreeViewItem中选择不同的项目时,它总是首先触发事件
treeView\u LostFocus
。仅当
TreeView
失去焦点时,而不是在trigger
treevieItem\u选择之前,如何触发失去焦点事件


ps:make
e.Handle=true
TreeView的末尾,您选择的
似乎不起作用。

解决方案是检查键盘焦点是否仍在TreeView中

private void treeView_LostFocus(object sender, RoutedEventArgs e)
{
    var tv = sender as TreeView;

    if (tv.IsKeyboardFocusWithin == false)
    {
        //Your code
    }
}

这样,当您的子项获得焦点时,您的代码将无法执行。只有当整个树视图失去焦点时

它起作用了。但还有一个问题。当整个TreeView失去焦点时,我应该将选定的TreeView项目设置为未选中,以便在重新选择同一TreeView项目时再次触发select事件。所以我只是将代码
treeViewItem.IsSelected=false
(treeViewItem是treeViewItem在xaml中的名称),它似乎不起作用。我有什么地方错了吗?也许鼠标双击活动是个不错的选择。不知何故,我必须将其放入选定事件中。@Dragon我认为,通过在树视图项上的MouseDown事件或另一个MouseClick事件,在树视图项上重新选择您的项目或只是运行您想要的代码,可能可以解决您的问题。但这是一个完全不同的问题。如果你在实现这一点上仍然有困难,我建议你再提出一个问题,在这个问题上,你可以更完整、更准确地描述你的问题,你想达到什么目的。