Звучит как сложный вопрос ... позвольте мне объяснить ...
У меня есть 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 ответа
Различайте избранные и целенаправленные. Вы не можете одновременно сфокусировать более одного элемента управления.
Вам нужно, чтобы TreeView Показывал выбранный узел, когда он потерял фокус.
Изменить:
Но я могу подтвердить проблему, установив фокус на другой элемент управления внутри SelectedItemChanged (), чтобы отменить выбор.
Итак, вам нужно что-то, чтобы отложить вызов Focus (). Грубое (но не идеальное) решение - поместить txtToken.Focus () в обработчик события trvTree_MouseUp (). Но это также уберет фокус, например, при расширении узла.
Поэтому вам, вероятно, придется использовать однократный таймер, запускаемый из SelectedItemChanged ().
this.Dispatcher.BeginInvoke((Action)delegate
{
txtToken.SelectAll();
txtToken.Focus();
});
Похожие вопросы
Новые вопросы
wpf
Windows Presentation Foundation, или WPF, является подсистемой для визуализации пользовательских интерфейсов в приложениях на основе Windows.