最近遇到个项目,设备上没有鼠标,界面为全屏的一个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. c++ 时间类型详解 time_t(转)

    原文链接:https://blog.csdn.net/love_gaohz/article/details/6637625 Unix时间戳(Unix timestamp),或称Unix时间(Unix ...

  2. linux修改ssh默认端口

    1 . 登录服务器,打开sshd_config文件 vim /etc/ssh/sshd_config 2 . 找到#Port 22,默认是注释掉的,先把前面的#号去掉,再插入一行设置成你想要的端口号, ...

  3. 【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码

    https://blog.csdn.net/qq_43758789/article/details/120576717 使用RestTemplate发送PostForObject的时候会出现乱码.这是 ...

  4. js-垃圾回收

    js 是垃圾回收的语言,也就是执行环境负责在代码执行时管理内存.1. 标记清理 垃圾回收程序时,会标记内存中存储的所有变量,然后会将所有在上下文中的变量,以及被在上下文中的变量引用的变量标记去掉.在此 ...

  5. go简单写个ini配置文件读取工具

    直接上代码: 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "reflect" 7 ...

  6. C语言源文件如何编译为exe

    先观看https://blog.csdn.net/u014772182/article/details/43348465来配置gcc环境随后在cmd中cd到目标文件夹gcc main.c -o ste ...

  7. springboot外部部署官方文档说明复制版

    官方文档地址为: https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#boot-features-e ...

  8. GitHub创建仓库导入项目

    1.进入主页,点击+号 2.填写仓库名称 3.记住网址! 4.项目所在文件夹路径 5.打开Git Bash 6.输入命令 $ cd C: $ cd AndroidTasks $ cd MusicPla ...

  9. (原创)odoo14下qweb模板的前端与后端语法区别

    1.后端(qweb打包) 后端使用t-inherit 指定继承的模板,使用t-inherit-mode 指定继承的模式,使用xpath定位标记,使用position指定扩展位置. 2.前端 前端仍旧使 ...

  10. Java-Collectors.groupingBy

    Java中的Collectors类的groupingBy()方法用于按某些属性对对象进行分组并将结果存储在Map实例中. 当我我们想利用它的特性,我们需要指定一个属性来执行分组.此方法提供的函数类似于 ...