Wpf 当焦点丢失时,Treeview项目将丢失选择

Wpf 当焦点丢失时,Treeview项目将丢失选择,wpf,treeview,focus,treeviewitem,Wpf,Treeview,Focus,Treeviewitem,我在正在开发的一个应用程序中注意到了这一点,所以我创建了一个简单的测试应用程序来演示。下面是我的a窗口和treeview项目的事件处理程序。如果展开“一个”或“两个”父节点,并单击其中一个子节点,则在文本框上调用Focus()方法后,选定的子节点不会显示为选中。相反,选择将弹出到父节点。是否有人知道如何克服这一问题,并将选择保留在选定的子节点上?谢谢 <Window x:Class="DockingSample.Window1" xmlns="http://schemas.microso

我在正在开发的一个应用程序中注意到了这一点,所以我创建了一个简单的测试应用程序来演示。下面是我的a窗口和treeview项目的事件处理程序。如果展开“一个”或“两个”父节点,并单击其中一个子节点,则在文本框上调用Focus()方法后,选定的子节点不会显示为选中。相反,选择将弹出到父节点。是否有人知道如何克服这一问题,并将选择保留在选定的子节点上?谢谢

<Window 
x:Class="DockingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
WindowState="Maximized"
>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TreeView Margin="6">
        <TreeViewItem Header="One">
            <TreeViewItem Header="One" Selected="TreeViewItem_Selected" />
            <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" />
            <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" />
        </TreeViewItem>
        <TreeViewItem Header="Two">
            <TreeViewItem Header="One" Selected="TreeViewItem_Selected" />
            <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" />
            <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" />
        </TreeViewItem>
    </TreeView>

    <TextBox Grid.Column="1" x:Name="textbox" />
</Grid>

使用上述窗口和“选定”事件句柄,让TreeView有一些时间来完成其事件,方法是:


Dispatcher.BeginInvoke(DispatcherPriority.Input,新操作(()=>textbox.Focus())

将TreeView.HideSelection设置为false。

只需一点重构注释,而不是将所选事件放在每个TreeView项目中,您可以:;似乎双击子元素可以正常工作,但不是单击一次…:SYeah,我知道,但在这种情况下,我不希望父节点实际导致操作发生,只希望子节点。我假设双击“有效”,因为第二次单击会将焦点重新捕获到树状视图,即使父对象高亮显示,子对象也可能标记为已选中,因此在第二次单击时不会再次选中。问题仍然存在,为什么树视图失去焦点时高亮显示会转移到父级?我认为这是WPF中的一个bug。也许报告?问题是关于WPF而不是Winforms
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
    {
        textbox.Focus();
    }