Wpf 如何从另一个按钮触发DataGridTextColumn编辑模式
我知道,双击DataGrid的单元格可以将其设置为编辑模式。但我怎么能从按钮上做到这一点呢?DataGridTextColumn的PrepareCellForEdit方法可能是我需要的,对吗?有什么办法吗Wpf 如何从另一个按钮触发DataGridTextColumn编辑模式,wpf,xaml,wpf-controls,wpfdatagrid,Wpf,Xaml,Wpf Controls,Wpfdatagrid,我知道,双击DataGrid的单元格可以将其设置为编辑模式。但我怎么能从按钮上做到这一点呢?DataGridTextColumn的PrepareCellForEdit方法可能是我需要的,对吗?有什么办法吗 <Grid> <DataGrid Name="MainDataGrid" ItemsSource="{Binding StringList}" AutoGenerateColumns="false" > <DataGrid.Columns>
<Grid>
<DataGrid Name="MainDataGrid" ItemsSource="{Binding StringList}" AutoGenerateColumns="false" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Width="*" IsReadOnly="False" />
</DataGrid.Columns>
</DataGrid>
<Button Name="ButtonEdit">Edit</Button>
编辑
找到
DataGridCell
元素,设置DataGrid
的CurrentCell
属性,调用BeginEdit()
,然后聚焦文本框。下面是一个例子:
private void ButtonEdit_Click(object sender, RoutedEventArgs e)
{
int columnIndex = 0;
DataGridCell cell = GetCell(MainDataGrid, MainDataGrid.ItemContainerGenerator.ContainerFromIndex(ServiceAddrDataGrid.SelectedIndex) as DataGridRow, columnIndex);
if (cell != null)
{
DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(cell);
MainDataGrid.CurrentCell = dataGridCellInfo;
MainDataGrid.BeginEdit();
TextBox textBox = FindVisualChild<TextBox>(cell.Content as DependencyObject);
if (textBox != null)
textBox.Focus();
}
}
private static DataGridCell GetCell(DataGrid dataGrid, DataGridRow rowContainer, int column)
{
if (rowContainer != null)
{
DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
if (presenter != null)
return presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
}
return null;
}
private static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
return (T)child;
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
private void按钮点击(对象发送者,路由目标)
{
int columnIndex=0;
DataGridCell=GetCell(MainDataGrid,MainDataGrid.ItemContainerGenerator.ContainerFromIndex(ServiceAddDataGrid.SelectedIndex)作为DataGridRow,columnIndex);
如果(单元格!=null)
{
DataGridCellInfo DataGridCellInfo=新的DataGridCellInfo(单元格);
MainDataGrid.CurrentCell=dataGridCellInfo;
MainDataGrid.BeginEdit();
TextBox TextBox=FindVisualChild(cell.Content作为DependencyObject);
如果(文本框!=null)
textBox.Focus();
}
}
私有静态DataGridCell GetCell(DataGrid DataGrid,DataGridRow rowContainer,int列)
{
if(rowContainer!=null)
{
DataGridCellsPresenter=FindVisualChild(rowContainer);
如果(演示者!=null)
将presenter.ItemContainerGenerator.ContainerFromIndex(列)作为DataGridCell返回;
}
返回null;
}
私有静态T FindVisualChild(DependencyObject obj),其中T:DependencyObject
{
for(int i=0;i
有关更多信息,请参阅以下博客文章
如何在WPF中以编程方式选择和聚焦数据网格中的行或单元格:这正是我想要的!谢谢