0

这听起来像一个棘手的问题......让我详细说明......

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

问题是,一旦我将代码添加到文本框的焦点,看起来 TreeView 不再显示其选定的节点(即 treeItem 根本没有被选中(或至少不可见))。

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

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


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

有任何想法吗?

4

2 回答 2

1

区分选择和专注。任何时候都不能有超过 1 个控制焦点。

您想要的是 TreeView 在失去焦点时显示它的选定节点。

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

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

因此,您可能必须使用从 SelectedItemChanged() 触发的一次性计时器。

于 2009-07-20T10:01:52.950 回答
0
this.Dispatcher.BeginInvoke((Action)delegate
{
    txtToken.SelectAll();
    txtToken.Focus();
});
于 2009-07-21T01:03:16.333 回答