Определите, кто фокусируется в Окне WPF

Мы используем WPF и получили окно из DockingLibrary. Это окно имеет сетку с несколькими объектами в нем, один являющийся WPF datagrid. Мы используем M-V-VM шаблон. Когда этот windown создан и показан, ни одна из строк в этом datagrid не выбрана. Мы можем установить строку для отображения, как выделено путем выполнения чего-то как:

  SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0;

Это заставляет первую строку в datagrid быть показанной, как выделено. Но, и нет ли всегда один из них, эта строка не Выбрана, ни делает это фокусируется. Я попробовал установку IsSelected и Focus на этой строке как в:

  SharedWindow.ShipmentWin.ShipVM.IsSelected = true;
  bool focused = SharedWindow.ShipmentWin.shipmentDataGrid.Focus();

Я иду об этом неправильно и являюсь там некоторым другим способом Выбрать первую строку в datagrid и установить фокус на него? Как правило, когда datagrid создается, никакая строка не выбрана до пользовательских щелчков мышью по желаемой строке.

Любые мысли значительно ценились бы.

спасибо!

6
задан Bill Campbell 9 March 2010 в 14:27
поделиться

2 ответа

Взгляните на FocusManager . Он позволяет установить фокус на другой элемент пользовательского интерфейса с помощью метода SetFocusedElement . Кроме того, он позволяет вам определять текущий фокусируемый элемент в вашем приложении, что может быть полезно для отладки проблем с фокусом. Snoop тоже может быть полезен. Он показывает текущий элемент с фокусом в нижней строке состояния.

Если вы используете DataGrid из WPF Toolkit, будьте готовы найти некоторые ошибки, связанные с обработкой фокуса. К некоторым из них недавно обратились .

9
ответ дан 10 December 2019 в 02:46
поделиться

Также стоит понять разницу между логическим фокусом и фокусом клавиатуры , которые являются совершенно разными животными. Метод .Focus () иногда устанавливает только логический фокус, что, вероятно, не то, что вам нужно.

В документации для метода Focus указано, что он вернет true , если фокус клавиатуры был установлен, и false в противном случае .

0
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: