Treeview Item Loses Selection When Focus Is Lost

2019-05-11 18:24发布

I have noticed this on an application I am working on right now, so I created a simple test app to demonstrate. Below is my a window and the event handler for the treeview items. If you expand either the "One" or "Two" parent nodes, and click one of the children, the child that was selected does not show up as selected after the Focus() method is called on the text box. Instead, selection pops to the parent node. Does anyone have any idea how to overcome this, and have the selection remain with the selected child node? Thanks.

<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>

private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
    {
        textbox.Focus();
    }

With the above window and the "Selected" event handl

2条回答
We Are One
2楼-- · 2019-05-11 18:58

Give some time for TreeView to finish their events by doing this instead:

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

查看更多
闹够了就滚
3楼-- · 2019-05-11 19:01

Set TreeView.HideSelection to false.

查看更多
登录 后发表回答