在c#/wpf中通过键盘滚动数据网格

问题描述 投票:0回答:1

我有一个小应用程序,仅使用条形码扫描仪和数字键盘。 因此,强制将焦点集中到文本框(txtInput),并且所有应用程序控制都是通过该文本框的 keydown 事件完成的。

扫描条形码后,显示盒子内容。现在我扫描更多代码,它们会从盒子的内容中添加或减去内容。我在数据网格中显示该框的内容。

问题是当盒子的内容大于屏幕所能容纳的大小时。我需要用键滚动数据网格。现在我已经这样做了:

UInt16 list = 1;

private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
  if (e.Key == Key.Enter)
  {
    // process of barcode
  }
  else if (e.Key == Key.Add)
  {
    if(list < dataGridTickets.Items.Count)
    {
        dataGridTickets.ScrollIntoView(dataGridTickets.Items[list]);
        list++;
    }
  }
  else if (e.Key == Key.Subtract)
  {
    if(list > 1)
    {
         dataGridTickets.ScrollIntoView(dataGridTickets.Items[list - 2]);
         list--;
    }
  }
}

它正在工作,但我必须按加号键 20 次才能到达底部项目并开始向下滚动。当我想向后滚动时,同样的问题。

除了通过基于项目的scrollintoview 之外,还有另一种方式来滚动数据网格吗?

有没有办法找出显示项目的数量,以便我可以将其添加到“列表”变量中? (不同数量的项目将适合不同的显示分辨率)

有没有办法以编程方式直接控制数据网格滑块的位置?

或者还有其他解决办法吗?

c# wpf scroll datagrid
1个回答
0
投票

您可以添加“按键修饰符”(例如 Shift 和/或 Ctrl),以扩展您当前支持的按键的功能范围;例如Ctrl+DownArrow(或 PageDown 等)告诉您的“代码隐藏”滚动到底部。

以同样的方式,Shift 和空格键(键代码)可以增量移动滑块。

PreviewKeyDown 事件(在某些父级别)对于“预览”按键往往更有用;并能够在事情变得复杂之前“接受、处理、传递和/或拒绝”任何按键(更多)。

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