最近遇到个项目,设备上没有鼠标,界面为全屏的一个DataGrid,需要实现按小键盘的0和1让DataGrid的当前选中行进行上下滚动

  起到重要参考的是:   https://blog.csdn.net/sinat_31608641/article/details/105428496    实现后台滚动到当前选中项。
      现在把主要实现方式做个笔记:

  首先,前台一定要设置VirtualizingStackPanel.IsVirtualizing="False"

  接下来,是两个公共方法:

  

        /// <summary>
/// 将SelectedItem滚动为第一行
/// </summary>
/// <param name="dataGrid">目标DagaGrid</param>
/// <param name="selectedItem">选中项</param>
public static void SetSelectedItemFirstRow(object dataGrid, object selectedItem)
{
//若目标datagrid为空,抛出异常
if (dataGrid == null)
{
throw new ArgumentNullException("目标无" + dataGrid + "无法转换为DataGrid");
}
//获取目标DataGrid,为空则抛出异常
System.Windows.Controls.DataGrid dg = dataGrid as System.Windows.Controls.DataGrid;
if (dg == null)
{
throw new ArgumentNullException("目标无" + dataGrid + "无法转换为DataGrid");
}
//数据源为空则返回
if (dg.Items == null || dg.Items.Count < 1)
{
return;
} //获取焦点,滚动为目标行
dg.Focus();
dg.SelectedItem = selectedItem;
dg.CurrentColumn = dg.Columns[0];
dg.ScrollIntoView(dg.SelectedItem, dg.CurrentColumn);
} /// <summary>
/// 获取选中的行
/// </summary>
/// <param name="datagrid"></param>
/// <param name="rowIndex"></param>
/// <returns></returns>
public static DataGridRow GetDataGridRow(DataGrid datagrid, int rowIndex)
{
DataGridRow row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
if (row == null)
{
datagrid.UpdateLayout(); row = (DataGridRow)datagrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
row.IsSelected = true;
}
return row;
}

  然后,添加一个窗体的KeyDown事件:

  

     private void UserControl_KeyDown(object sender, KeyEventArgs e)
{
dgvDeal.Focus();
if (e.Key==Key.NumPad0)
{
if (dgvDeal.SelectedIndex == dgvDeal.Items.Count-1)
{
dgvDeal.SelectedIndex = 0;
}
else
{
dgvDeal.SelectedIndex = dgvDeal.SelectedIndex + 1;
}
}
else if (e.Key == Key.NumPad1)
{
if (dgvDeal.SelectedIndex == 0)
{
dgvDeal.SelectedIndex = dgvDeal.Items.Count-1;
}
else
{
dgvDeal.SelectedIndex = dgvDeal.SelectedIndex - 1;
}
} DataGridRow resRow = GetDataGridRow(dgvDeal, dgvDeal.SelectedIndex);
resRow.IsSelected = true;
SetSelectedItemFirstRow(dgvDeal, dgvDeal.SelectedItem); }

OK!

WPF 后台实现按数字键滚动DataGrid 当前选中项的更多相关文章

  1. WPF TextBox 只能输入数字键

     <Grid>         <TextBox Name="textBox1" PreviewTextInput="textBox1_PreviewT ...

  2. select 后台获取text 并根据text 设置value选中项

    -------获取select 的text string orderNo = this.orderNo.Items[this.orderNo.SelectedIndex].Text; -----根据t ...

  3. WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

    原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...

  4. wpf后台设置颜色(背景色,前景色)

    有时候你是不是也会遇到要在wpf后台给某个控件设置背景色或者给文字设置前景色的情况? 本人最近看到一个从自定义的combobox读取系统字体和颜色的实例,该实例实现了随字体combobox选项改变而改 ...

  5. PHP合并2个数字键数组的值

    先要了解一个基础知识点:PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧 <?php /** * PHP合并2个数字键数组的值 * * @param arr ...

  6. 如何使用alt键+数字键盘上的数字键打出特殊符号

    如何使用alt键+数字键盘上的数字键打出特殊符号 有时当我需要画示意图说明一个问题,但是苦于没有合适的符号,因此,这篇博文将简单介绍一些特殊的符号方便自己以及大家使用. 实现原理很简单:所有的字符(包 ...

  7. WPF后台设置xaml控件的样式System.Windows.Style

    WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵   http://3w.suchso.com/projecteac-tual/wpf-zhi ...

  8. 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法

    在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法   ==========方法1: --------1. 选相应 ...

  9. WPF后台访问XAML元素

    当我们需要从后台访问xaml文件时,我们可以通过这样的方式来操作: private void button1_Click(object sender, RoutedEventArgs e) { Sys ...

  10. PHP数组关于数字键名的问题

    以下是对PHP数组数字键名的几点总结: 键名长度只能在 int 长度范围内,超过int 范围后将会出现覆盖等混乱情况 在键名长度为 int 范围内存取值时,PHP会强制将数字键名转换为 int 数值型 ...

随机推荐

  1. Python 闭包,生成式,推导式

    闭包概念 闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似, 不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数.一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继 ...

  2. pypeeter 自动化

    Pypputeer Puppeteer 是 Google 基于 Node.js 开发的一个工具,而 Pyppeteer 又是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但它不 ...

  3. class和struct区别

    类(class) 引用类型:将一个对象赋值给另一个对象时,系统不会对此对象进行拷贝,而会将指向这个对象的指针赋值给另一个对象,当修改其中一个对象的值时,另一个对象的值会随之改变. 结构体(struct ...

  4. C语言中的malloc、new、memset函数解析

    1. malloc 在window下,malloc的函数原型: extern void *malloc(unsigned int num_bytes); 头文件: #include<malloc ...

  5. iOS 常用第三方库及原理

    AFNetWorking SDWebImage MJRefresh Masonry YYModel IQKeyboardManger

  6. Java面向对象之static关键字详解

    static关键字详解 package OOP.Demo10; public class Person { //2:赋初值 { System.out.println("匿名代码块" ...

  7. python获取上月、当月、下月的开始和结束日期

    获取上月开始结束日期 方法一 import datetime def get_date_of_last_month(form="%Y-%m-%d"): ""&q ...

  8. Python爬取三国演义章节标题和内容(bs4爬取,解决中文乱码)

    import os.path import requests from bs4 import BeautifulSoup if __name__ == '__main__': if not os.pa ...

  9. python利用signal自定义函数超时机制

    利用signal模块,可以给函数设置一个超时时间(精确到秒),结合装饰器实现:超时时间内函数运行完成正常退出,超时时间内函数未运行完成则抛出Timeout异常. 1 # coding:utf8 2 i ...

  10. 电脑安装不同版本的QT

    系统:windows Qt版本:5.10/5.13 电脑中已经安装5.10版本的,安装5.13版本的不知道是否会出现问题,故此记录. 下载安装Qt5.13,安装过程跟之前版本的基本没差别,安装路径 D ...