失去焦点时,Treeview 项目会失去选择

unc*_*mmy 5 wpf treeview focus treeviewitem

我在我现在正在处理的应用程序上注意到了这一点,因此我创建了一个简单的测试应用程序来演示。下面是我的一个窗口和树视图项的事件处理程序。如果您展开“一个”或“两个”父节点,并单击其中一个子节点,则在对文本框调用 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>
Run Code Online (Sandbox Code Playgroud)

private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
    {
        textbox.Focus();
    }
Run Code Online (Sandbox Code Playgroud)

使用上面的窗口和“Selected”事件句柄

ani*_*vas 4

通过执行以下操作,给 TreeView 一些时间来完成其事件:

Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() => textbox.Focus()));