我有一个小应用程序,仅使用条形码扫描仪和数字键盘。 因此,强制将焦点集中到文本框(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 之外,还有另一种方式来滚动数据网格吗?
有没有办法找出显示项目的数量,以便我可以将其添加到“列表”变量中? (不同数量的项目将适合不同的显示分辨率)
有没有办法以编程方式直接控制数据网格滑块的位置?
或者还有其他解决办法吗?
您可以添加“按键修饰符”(例如 Shift 和/或 Ctrl),以扩展您当前支持的按键的功能范围;例如Ctrl+DownArrow(或 PageDown 等)告诉您的“代码隐藏”滚动到底部。
以同样的方式,Shift 和空格键(键代码)可以增量移动滑块。
PreviewKeyDown 事件(在某些父级别)对于“预览”按键往往更有用;并能够在事情变得复杂之前“接受、处理、传递和/或拒绝”任何按键(更多)。