Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关注DataGrid中的文本框_C#_Wpf_Datagrid - Fatal编程技术网

C# 关注DataGrid中的文本框

C# 关注DataGrid中的文本框,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在努力解决数据网格中存在的聚焦文本框的问题。 实际情况是: 我有一个DataGrid,其中有3列。DataGrid的第3列包含两个不同的控件:-一个是ComboBox,另一个是TextBox(两者都在同一行定义和列定义中)。 假设我有3行,那么需要的是当我在文本框中输入文本(出现在第一行)并按enter键时,焦点应该移动到下一行文本框,但现在发生的是它聚焦数据网格的整个单元格(包含ComboBox和Textbox) 我试过几个例子: private void dg_PreviewKeyDo

我正在努力解决数据网格中存在的聚焦文本框的问题。 实际情况是:

我有一个DataGrid,其中有3列。DataGrid的第3列包含两个不同的控件:-一个是ComboBox,另一个是TextBox(两者都在同一行定义和列定义中)。 假设我有3行,那么需要的是当我在文本框中输入文本(出现在第一行)并按enter键时,焦点应该移动到下一行文本框,但现在发生的是它聚焦数据网格的整个单元格(包含ComboBox和Textbox)

我试过几个例子:

 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();
}
}

看看被标记的答案没有帮助..对不起