如何将焦点设置为WPF工具包datagrid的特定单元格

问题描述 投票:13回答:4

我正在使用WPF工具包提供的DataGrid控件来显示产品列表及其OpenStock,Description等。在这个DataGrid中,我将OpenStock列设置为editable,rest是不可编辑的。我现在想要的是当我加载这个窗口时,我想将键盘焦点设置到OpenStock列的第一个单元格,如果可能的话,在编辑模式下。我搜索了这个2天,最后在这里发帖。

任何帮助或代码示例都会有所帮助。

<my:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Margin="2,2,2,55" 
x:Name="dataGrid1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="White"    
AlternatingRowBackground="AliceBlue" AlternationCount="2" SelectionMode="Single" 
SelectionUnit="Cell" BorderThickness="0" IsTabStop="True">
        <my:DataGrid.Resources>
            <Style x:Key="errorStyle" TargetType="{x:Type TextBox}">
                <Setter Property="Padding" Value="-2"/>
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Setter Property="Background" Value="Yellow"/>
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
                                Path=(Validation.Errors)[0].ErrorContent}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </my:DataGrid.Resources>
        <my:DataGrid.Columns>
            <my:DataGridTextColumn Width="60" FocusManager.IsFocusScope="False" Binding="{Binding Path=pCode}" Header="Code" IsReadOnly="True" />
            <my:DataGridTextColumn Width="150" Binding="{Binding pName}" Header="Description"  IsReadOnly="True" />
            <my:DataGridTextColumn Width="120" Binding="{Binding CloseStock}" Header="Closing Stock"  IsReadOnly="True" />
            <my:DataGridTextColumn  Width="100" Binding="{Binding OpenStock, ValidatesOnExceptions=True}" Header="Open Stock"
                                   EditingElementStyle="{StaticResource errorStyle}"/>
            <my:DataGridTextColumn Width="150" Binding="{Binding YrlyOpenStock}" Header="Yearly Opening"  IsReadOnly="True" />

        </my:DataGrid.Columns>
    </my:DataGrid>       

非常感谢........

c# wpf wpfdatagrid
4个回答
40
投票

您需要将当前单元格设置为您想要编辑的单元格,然后在Loaded处理程序中调用BeginEdit

dataGrid1.CurrentCell = new DataGridCellInfo(
    dataGrid1.Items[0], dataGrid1.Columns[3]);
dataGrid1.BeginEdit();

如果在XAML中为DataGridTextColumn指定名称,则可以使用该名称而不是Columns[3]


6
投票

使用此代码将滚动视图移动到特定单元格

dgv.ScrollIntoView(dgv.Items [row],dgv.Columns [col]);


0
投票

使用下面的功能,它会工作。

private void SetFocusOnGrid(DataGrid grid, int index)
{
    grid.ScrollIntoView(grid.Items.GetItemAt(index));
    grid.SelectionMode = DataGridSelectionMode.Single;
    grid.SelectionUnit = DataGridSelectionUnit.FullRow;
    grid.SelectedIndex = index;

    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
    row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}  

0
投票

这对我有用:

DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(dataGrid1.Items[sampleRowIndex], dataGrid1.Columns[sampleColumnIndex]);
dataGrid1.SelectedCells.Clear();
dataGrid1.SelectedCells.Add(dataGridCellInfo);

这将选择您想要关注的单元格。

DataGridCellInfo对象提供有关单元格和与单元格关联的数据项的信息。当DataGrid控件获取单元格时(例如,在CurrentCell或SelectedCells属性中),它将用于代替对实际DataGridCell对象的引用。查看here了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.