В WPF, при выборе TreeViewItem, как мне сосредоточиться на другом элементе управления, но все же завершить мой выбор TreeViewItem? - PullRequest
0 голосов
/ 20 июля 2009

Звучит как хитрый вопрос ... позвольте мне проработать ...

У меня есть TreeView. При щелчке / выборе treeViewItem я бы хотел, чтобы другой TextBox был сфокусирован.

Проблема в том, что, как только я добавляю код в Focus Textbox, он выглядит так, как будто TreeView больше не показывает свой выбранный узел (т.е. treeItem вообще не выбран (или, по крайней мере, не виден)). *

Вот мой код обработки событий ...

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


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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 июля 2009

Различают выбранное и сфокусированное. Вы не можете использовать более одного элемента управления одновременно.

То, что вы хотите, это чтобы TreeView Показывал его выбранный узел, когда он потерял фокус.

Edit:
Но я могу подтвердить проблему, установка Фокуса на другой элемент управления внутри SelectedItemChanged () отменит выбор.

Так что вам нужно что-то, чтобы отложить вызов Focus (). Грубое (но не идеальное) решение состоит в том, чтобы поместить txtToken.Focus () в обработчик событий trvTree_MouseUp (). Но это также отнимет фокус при расширении узла, например.

Так что вам, вероятно, придется использовать таймер однократного срабатывания из SelectedItemChanged ().

0 голосов
/ 21 июля 2009
this.Dispatcher.BeginInvoke((Action)delegate
{
    txtToken.SelectAll();
    txtToken.Focus();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...