Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
Wpf 如何从另一个按钮触发DataGridTextColumn编辑模式_Wpf_Xaml_Wpf Controls_Wpfdatagrid - Fatal编程技术网

Wpf 如何从另一个按钮触发DataGridTextColumn编辑模式

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>

我知道,双击DataGrid的单元格可以将其设置为编辑模式。但我怎么能从按钮上做到这一点呢?DataGridTextColumn的PrepareCellForEdit方法可能是我需要的,对吗?有什么办法吗

<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中以编程方式选择和聚焦数据网格中的行或单元格:

这正是我想要的!谢谢