代码之家  ›  专栏  ›  技术社区  ›  willem

在WPF中,选择TreeView项时,如何将焦点放在另一个控件上,但仍然完成TreeView项的选择?

  •  0
  • willem  · 技术社区  · 15 年前

    这听起来是个棘手的问题…让我埃拉博罗…

    我有一棵树视图。单击/选择树视图项时,我希望另一个文本框处于焦点。

    问题是,只要我添加代码来聚焦文本框,TreeView就好像不再显示其选定的节点(即,TreeItem根本没有被选中(或至少不可见))。

    这是我的事件处理代码…

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

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Henk Holterman    15 年前

    区分选定和聚焦。一次最多只能集中一个控件。

    你想要的是你的树视图 当它失去焦点时,它就是selectednode。

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

    所以您需要一些延迟focus()调用的东西。一个粗糙(但不理想)的解决方案是将txttoken.focus()放在trvtree ouseup()事件处理程序中。但是,例如,在扩展节点时,这也会带走焦点。

    因此,您可能需要使用从selectedItemChanged()中激发的一次性计时器。

        2
  •  0
  •   Oleg Mihailik    15 年前
    this.Dispatcher.BeginInvoke((Action)delegate
    {
        txtToken.SelectAll();
        txtToken.Focus();
    });