Treeview物品在失去焦点时失去选择 [英] Treeview Item Loses Selection When Focus Is Lost

查看:149
本文介绍了Treeview物品在失去焦点时失去选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经注意到了我正在使用的应用程序,所以我创建了一个简单的测试应用程序来演示。下面是我的一个窗口和树视图项目的事件处理程序。如果展开一个或两个父节点,然后单击其中一个子项,则在文本框上调用Focus()方法后,所选的子项不会显示为选定子项。相反,选择弹出到父节点。有没有人有任何想法如何克服这一点,并选择留在选定的孩子节点?

$ p $ < 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 =最大化
>
<网格>
< Grid.ColumnDefinitions>
< ColumnDefinition Width =300/>
< ColumnDefinition Width =*/>
< /Grid.ColumnDefinitions>

< TreeView Margin =6>
< TreeViewItem Header =One>
< TreeViewItem Header =OneSelected =TreeViewItem_Selected/>
< TreeViewItem Header =TwoSelected =TreeViewItem_Selected/>
< TreeViewItem Header =ThreeSelected =TreeViewItem_Selected/>
< / TreeViewItem>
< TreeViewItem Header =Two>
< TreeViewItem Header =OneSelected =TreeViewItem_Selected/>
< TreeViewItem Header =TwoSelected =TreeViewItem_Selected/>
< TreeViewItem Header =ThreeSelected =TreeViewItem_Selected/>
< / TreeViewItem>
< / TreeView>

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

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

$ / code>

用上面的窗口和Selected事件处理

解决方案



调度器给予TreeView一些时间来完成它们的事件.BeginInvoke(DispatcherPriority.Input,new Action(()=> textbox.Focus()));

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

解决方案

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

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

这篇关于Treeview物品在失去焦点时失去选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆