Мы используем 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 создается, никакая строка не выбрана до пользовательских щелчков мышью по желаемой строке.
Любые мысли значительно ценились бы.
спасибо!
Взгляните на FocusManager . Он позволяет установить фокус на другой элемент пользовательского интерфейса с помощью метода SetFocusedElement . Кроме того, он позволяет вам определять текущий фокусируемый элемент в вашем приложении, что может быть полезно для отладки проблем с фокусом. Snoop тоже может быть полезен. Он показывает текущий элемент с фокусом в нижней строке состояния.
Если вы используете DataGrid из WPF Toolkit, будьте готовы найти некоторые ошибки, связанные с обработкой фокуса. К некоторым из них недавно обратились .
Также стоит понять разницу между логическим фокусом и фокусом клавиатуры , которые являются совершенно разными животными. Метод .Focus ()
иногда устанавливает только логический фокус, что, вероятно, не то, что вам нужно.
В документации для метода Focus
указано, что он вернет true
, если фокус клавиатуры был установлен, и false
в противном случае .