【问题标题】:Focus problems in datagrid数据网格中的焦点问题
【发布时间】:2011-10-26 18:34:22
【问题描述】:

我正在开发一个会计应用程序,我的用户根本不想触摸鼠标,因为它会降低他们的速度......所以专注在应用程序中非常重要。 我正在使用数据网格来显示一些数据,他们想要的是一旦加载窗口并在数据网格中填充数据,他们应该能够使用箭头键在数据网格中移动并通过按 Enter 调用命令...即,键盘焦点应位于第一行或第一个单元格。 我几乎尝试了所有方法,但似乎没有任何效果,现在他们必须按 TAB 一次才能进入数据网格,即使最后一行在窗口中显示为选中我的意思是最后一行被选中但为了在数据网格中上下鼠标,他们必须按 TAB 一次……我不明白这里有什么问题……这是我在 Windows 的加载事件中用来设置 UI 的代码:

dataGrid1.SelectedIndex = dataGrid1.Items.Count -1;
dataGrid1.CurrentItem = dataGrid1.SelectedItem;

dataGrid1.Focus();
dataGrid1.ScrollIntoView(dataGrid1.CurrentItem);

【问题讨论】:

    标签: c# .net wpf focus wpfdatagrid


    【解决方案1】:

    DataGrid 设置SelectedIndex="0" 并订阅Loaded 事件。在事件处理程序中,您可以通过调用 MoveFocus 将焦点移动到第一行/单元格

    Xaml

    <DataGrid ...
              SelectedIndex="0"
              Loaded="DataGrid_Loaded">
    

    事件处理程序背后的代码

    private void DataGrid_Loaded(object sender, RoutedEventArgs e)
    {
        DataGrid dataGrid = sender as DataGrid;
        dataGrid.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      //set current cell which you want to edit
      dataGrid1.CurrentCell = new DataGridCellInfo(dataGrid1.Items[0], dataGrid1.Columns[0]);
      //start editing it
      dataGrid1.BeginEdit();
      

      我在 DataGrid 的加载事件中执行此代码并且工作正常

      【讨论】:

      • 谢谢伙计,我以前用过这个,但问题是它把那个单元格置于我不想要的编辑模式,因为如果他们在该行中按 Enter 键而不输入任何内容,应用程序的行为应该会有所不同。
      • 那你想要什么?单元格应该在没有编辑模式的情况下选择?
      • 正是我的意思是用户应该能够使用向上/向下键在数据网格中移动并通过按 Enter 发出 certan 命令,现在命令的使用取决于当前选定的项目,因此在加载期间选择第一行/单元格的原因..
      猜你喜欢
      • 1970-01-01
      • 2014-02-18
      • 2015-10-13
      • 2014-03-08
      • 1970-01-01
      • 2011-05-20
      • 2014-05-03
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多