我正在努力解决关注 DataGrid中存在的 TextBox 问题。 真实情况是:
我有一个DataGrid,其中我有3列.DataGrid的第3列包含2个不同的控件: - 一个是ComboBox,另一个是TextBox(两者都在同一个RowDefinition和ColumnDefinition中)。 假设我有3行所以我想要的是当我在文本框中输入文本(出现在第一行)并按ENTER然后焦点应该移动到下一行TEXTBOX,但现在发生的是它聚焦全细胞(包含ComboBox和TextBox)DataGrid。
我尝试了几个示例:
private void dg_PreviewKeyDown(object sender, KeyEventArgs e)
{
var uie = e.OriginalSource as UIElement;
if (e.Key == Key.Enter)
{
e.Handled = true;
uie.MoveFocus(
new TraversalRequest(FocusNavigationDirection.Next));
}
}
但它将焦点转移到下一个CELL,它与使用ComoBox和TextBox的聚焦单元格相同。
我也关注了这个链接,但它有助于:
http://madprops.org/blog/enter-to-tab-as-an-attached-property/
帮帮我出来的人......聚焦控制总是BUGS ME。
答案 0 :(得分:0)
我终于找到了解决方案:
以下是帮助我将注意力集中在输入键上的代码:
注意: UCItems 是绑定到DataGrid的集合
private void dg_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
DataGridRow rowContainer = (DataGridRow)BomPickerGrid.ItemContainerGenerator.ContainerFromItem(UCItems[gridIndex+1]);
if (rowContainer != null)
{
DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
int columnIndex = BomPickerGrid.Columns.IndexOf(BomPickerGrid.CurrentColumn);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Last);
/* FocusNavigationDirection.Last is used because the
TextBox I want to focus on is the Last control in that Cell*/
request.Wrapped = true;
cell.MoveFocus(request);
rowContainer = (DataGridRow)BomPickerGrid.ItemContainerGenerator.ContainerFromItem(BomPickerGrid.CurrentItem);
BomPickerGrid.SelectedItem = BomPickerGrid.CurrentItem;
e.Handled = true;
BomPickerGrid.UpdateLayout();
}
}