在WPF中,当选择TreeViewItem时,如何关注另一个控件但仍然完成我的TreeViewItem选择?

时间:2009-07-20 09:56:38

标签: wpf treeview

这听起来像是一个棘手的问题......让我精心准备......

我有一个treeView。当单击/选择treeViewItem时,我希望另一个TextBox被聚焦。

问题在于,只要我将代码添加到Focus the Textbox,就会看起来TreeView不再显示其选定的节点(即treeItem根本没有被选中(或者至少没有被选中))。

这是我的事件处理代码......

    private void trvTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        grpEditTreeItem.DataContext = (TreeItemDefinition)e.NewValue;


        txtToken.SelectAll();
        txtToken.Focus();
    }

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

区分选定和聚焦。任何时候都不能有超过1个控制。

你想要的是TreeView在失去焦点时显示它的selectednode。

编辑:
但我可以确认问题,将Focus设置为SelectedItemChanged()内的另一个控件将取消选择。

所以你需要的是推迟Focus()调用。粗略(但不理想)的解决方案是将txtToken.Focus()放在trvTree_MouseUp()事件处理程序中。但是,例如,当扩展节点时,这也会使焦点消失。

所以你可能不得不使用从SelectedItemChanged()触发的一次性计时器。

答案 1 :(得分:0)

this.Dispatcher.BeginInvoke((Action)delegate
{
    txtToken.SelectAll();
    txtToken.Focus();
});