C# 如何在DataGrid页面加载时聚焦并开始编辑第一行的第一个单元格

C# 如何在DataGrid页面加载时聚焦并开始编辑第一行的第一个单元格,c#,wpf,datagrid,C#,Wpf,Datagrid,当UserControl自动加载或页面加载时,我想聚焦并开始编辑第一行的第一个单元格。我已经尝试了很多代码,但还没有找到解决方案。我已经为DataGrid编写了代码: <UserControl x:Class="Inventory_Control.UserControls.FileTab" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="

UserControl
自动加载或页面加载时,我想聚焦并开始编辑第一行的第一个单元格。我已经尝试了很多代码,但还没有找到解决方案。我已经为
DataGrid
编写了代码:

<UserControl x:Class="Inventory_Control.UserControls.FileTab"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Inventory_Control.UserControls"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid Background="#FF2C2929">
        <DataGrid  DataGridCell.Selected="DataGrid_GotFocus" SelectionUnit="Cell" 
                   SelectionMode="Single" Name="Datagrid"  AutoGenerateColumns="False" 
                   PreviewKeyDown="Datagrid_PreviewKeyDown" 
                   CurrentCellChanged="Datagrid_CurrentCellChanged">

            <DataGrid.Columns>

                <DataGridTextColumn Header="Code" Width="1*" Binding="{Binding Code}"/>
                <DataGridTextColumn Header="Code" Width="1*" Binding="{Binding Name}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</UserControl>

您应该获得要聚焦的单元格的引用。等待元素加载完毕,然后使用
VisualTreeHelper
类:

public FileTab()
{
    InitializeComponent();
    AddValues();

    Loaded += (s, e) =>
    {
        DataGrid grid = dg;
        DataGridRow rowContainer = grid.ItemContainerGenerator.ContainerFromIndex(0) as DataGridRow;
        if (rowContainer != null)
        {
            DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
            if (presenter != null)
            {
                DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromIndex(0) as DataGridCell;
                if (cell != null)
                {
                    DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(cell);
                    if (!grid.SelectedCells.Contains(dataGridCellInfo))
                    {
                        grid.SelectedCells.Add(dataGridCellInfo);
                    }
                    grid.CurrentCell = dataGridCellInfo;
                    grid.BeginEdit();
                }
            }
        }
    };
}

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;
}
publicfiletab()
{
初始化组件();
AddValues();
加载+=(s,e)=>
{
DataGrid=dg;
DataGridRow rowContainer=grid.ItemContainerGenerator.ContainerFromIndex(0)作为DataGridRow;
if(rowContainer!=null)
{
DataGridCellsPresenter=FindVisualChild(rowContainer);
如果(演示者!=null)
{
DataGridCell=presenter.ItemContainerGenerator.ContainerFromIndex(0)作为DataGridCell;
如果(单元格!=null)
{
DataGridCellInfo DataGridCellInfo=新的DataGridCellInfo(单元格);
如果(!grid.SelectedCells.Contains(dataGridCellInfo))
{
grid.SelectedCells.Add(dataGridCellInfo);
}
grid.CurrentCell=dataGridCellInfo;
grid.BeginEdit();
}
}
}
};
}
私有静态T FindVisualChild(DependencyObject obj),其中T:DependencyObject
{
for(int i=0;i
public FileTab()
{
    InitializeComponent();
    AddValues();

    Loaded += (s, e) =>
    {
        DataGrid grid = dg;
        DataGridRow rowContainer = grid.ItemContainerGenerator.ContainerFromIndex(0) as DataGridRow;
        if (rowContainer != null)
        {
            DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
            if (presenter != null)
            {
                DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromIndex(0) as DataGridCell;
                if (cell != null)
                {
                    DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(cell);
                    if (!grid.SelectedCells.Contains(dataGridCellInfo))
                    {
                        grid.SelectedCells.Add(dataGridCellInfo);
                    }
                    grid.CurrentCell = dataGridCellInfo;
                    grid.BeginEdit();
                }
            }
        }
    };
}

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