代码之家  ›  专栏  ›  技术社区  ›  Raj

如何将焦点设置为WPF工具箱数据报的特定单元格

  •  13
  • Raj  · 技术社区  · 15 年前

    我使用WPF工具包提供的DataGrid控件来显示产品列表及其OpenStock、说明等。在此DataGrid中,我将OpenStock列设置为可编辑,其余部分不可编辑。我现在想要的是,当这个窗口加载时,我想将键盘焦点设置为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>       
    

    非常感谢……

    4 回复  |  直到 6 年前
        1
  •  39
  •   Quartermeister    15 年前

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

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

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

        2
  •  6
  •   Monntrack    14 年前

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

    dgv.scrollintoview(dgv.items[row],dgv.columns[col]);

        3
  •  0
  •   Anh Pham Dinesh Kumar    7 年前

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

    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));
    }  
    
        4
  •  0
  •   Parisa rudigrobler    6 年前

    这对我很有用:

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

    这将选择要将焦点放在的单元格。

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