最近遇到个项目,设备上没有鼠标,界面为全屏的一个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. 高级讲师肖SIR _简历上 _金融类项目

    ================================ 项目名称:现金巴士 项目简介: 现金巴士是一家专注于消费金融的网络借贷信息中介服务平台,以大数据和互联网技术为基础,凭借自身风控系统和 ...

  2. Easyui 表格列数据合并!

    //datagrid调用列子 onLoadSuccess: function (data) { $(".datagrid-header-row").css("text-a ...

  3. 关于pytest生成测试报告

    之前用pytest集成allure,记录的很清楚确实很好,但是我不知道怎么把生成的所有结果通过邮箱发送 可以使用pytest-html生成的html是这样的 也很清楚 但是!!!!!!!!!!!!!! ...

  4. cdn全栈加速nginx二层代理实现

    1 nginx.conf中添加配置如下: server { listen 5050; location / { proxy_pass http://代理IP:3333; proxy_set_heade ...

  5. 题解[LuoguP5591]小猪佩奇学数学

    题解[LuoguP5591]小猪佩奇学数学 前置知识 基本数论推式子能力,如分配律结合律等 等比数列求和 \(\sum_{i=a}^bx^i=\dfrac{x^{b+1}-x^a}{x-1}\) 二项 ...

  6. Tomcat集群配置--负载均衡

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

  7. django中读取settings中的相关参数

    from django.conf import settings print(settings.IP_LOCAL)

  8. pg到达梦数据迁移常见问题

    1  迁移提示 ERROR: column t1.tgconstrname does not exist Position: 113 重新迁移,选择转换的时候提示:ERROR: column t1.t ...

  9. (Fiddler)Fiddler 的相关操作

    Fiddler 的几个常用操作: 1. Statistics:会话信息统计 1)选择当前页面的第一个请求和最后一个请求,通过计算 statistics,就知道该页面总共的耗时时间. 2)查出当前页面耗 ...

  10. Pyodide读取CSV、EXCEL

    from pyodide.http import pyfetch, open_url pyfetch(url="/your/URL/goes/here", method=" ...