C# 关注DataGrid中的文本框
我正在努力解决数据网格中存在的聚焦文本框的问题。 实际情况是: 我有一个DataGrid,其中有3列。DataGrid的第3列包含两个不同的控件:-一个是ComboBox,另一个是TextBox(两者都在同一行定义和列定义中)。 假设我有3行,那么需要的是当我在文本框中输入文本(出现在第一行)并按enter键时,焦点应该移动到下一行文本框,但现在发生的是它聚焦数据网格的整个单元格(包含ComboBox和Textbox) 我试过几个例子:C# 关注DataGrid中的文本框,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在努力解决数据网格中存在的聚焦文本框的问题。 实际情况是: 我有一个DataGrid,其中有3列。DataGrid的第3列包含两个不同的控件:-一个是ComboBox,另一个是TextBox(两者都在同一行定义和列定义中)。 假设我有3行,那么需要的是当我在文本框中输入文本(出现在第一行)并按enter键时,焦点应该移动到下一行文本框,但现在发生的是它聚焦数据网格的整个单元格(包含ComboBox和Textbox) 我试过几个例子: private void dg_PreviewKeyDo
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));
}
}
但它将焦点移动到下一个单元格上,这与使用ComoBox和TextBox的聚焦单元格相同
我也遵循了这个链接,但它没有帮助:
帮帮我,伙计们。聚焦控制总是让我感到困扰。我终于找到了解决方案: 下面是帮助我将注意力转移到enter键的代码: 注意:UCItems是绑定到数据网格的集合
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();
}
}
private void dg_PreviewKeyDown(对象发送方,KeyEventArgs e)
{
如果(e.Key==Key.Enter)
{
DataGridRow rowContainer=(DataGridRow)BomPickerGrid.ItemContainerGenerator.ContainerFromItem(UCItems[gridIndex+1]);
if(rowContainer!=null)
{
DataGridCellsPresenter=FindVisualChild(rowContainer);
int columnIndex=BomPickerGrid.Columns.IndexOf(BomPickerGrid.CurrentColumn);
DataGridCell=(DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
TraversalRequest=新的TraversalRequest(FocusNavigationDirection.Last);
/*使用FocusNavigationDirection.Last是因为
我要关注的文本框是该单元格中的最后一个控件*/
request.Wrapped=true;
移动焦点(请求);
rowContainer=(DataGridRow)BomPickerGrid.ItemContainerGenerator.ContainerFromItem(BomPickerGrid.CurrentItem);
BomPickerGrid.SelectedItem=BomPickerGrid.CurrentItem;
e、 已处理=正确;
BomPickerGrid.UpdateLayout();
}
}
看看被标记的答案没有帮助..对不起