WPF datagrid获取下一列里面的textbox
时间: 2024-04-29 19:24:51 浏览: 13
可以通过以下代码获取 WPF datagrid 下一列中某个 cell 的 textbox:
```
var nextColumnIndex = DataGridCellInfo.Column.DisplayIndex + 1;
if (nextColumnIndex < DataGrid.Columns.Count)
{
var nextColumn = DataGrid.Columns[nextColumnIndex];
var nextCell = new DataGridCellInfo(DataGrid.Items[DataGridCellInfo.Item], nextColumn);
var nextTextBox = FindVisualChild<TextBox>(nextCell);
}
```
其中,FindVisualChild 是一个辅助方法,用于在控件树中查找指定类型的子控件。
相关问题
WPF datagrid寻找下一列里面的textbox
可以使用VisualTreeHelper类的FindVisualChild方法找到DataGridRow中的Textbox,再获取下一列的Textbox。以下是示例代码:
```
public static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child != null && child is T)
{
return (T)child;
}
else
{
var result = FindVisualChild<T>(child);
if (result != null)
return result;
}
}
return null;
}
private void GetNextTextBox()
{
var row = dataGrid.ItemContainerGenerator.ContainerFromIndex(dataGrid.SelectedIndex) as DataGridRow;
if (row != null)
{
// 获取当前选中单元格的列索引
var columnIndex = dataGrid.CurrentColumn.DisplayIndex;
// 获取下一列的Textbox
var nextTextBox = FindVisualChild<TextBox>(row)
.Where(tb => Grid.GetColumn(tb) == columnIndex + 1)
.FirstOrDefault();
if (nextTextBox != null)
{
nextTextBox.Focus();
}
}
}
```
当然以上代码只是示例,需要根据具体情况进行修改。
WPF datagrid让下一列的文本框获取焦点
可以使用以下代码实现:
```
private void dataGrid_CurrentCellChanged(object sender, EventArgs e)
{
if (dataGrid.CurrentCell.Column != null)
{
dataGrid.BeginEdit();
var control = dataGrid.CurrentCell.Column.GetCellContent(dataGrid.SelectedItem);
if (control != null)
{
var textBox = control as TextBox;
if (textBox != null)
{
textBox.Focus();
}
}
}
}
```
此代码会在当前单元格有变化时自动将下一个单元格的文本框获取焦点。