zoukankan      html  css  js  c++  java
  • 后台绑定datagrid的SelectionItem事件时,anchor为null,致使shift多选出错

      操作DataGrid中,鼠标点击选中与后台选中有点不一样,鼠标点击选中时,再按shift or Ctrl +左键会原有鼠标选中状态会保持,而后台选中再按shift or Ctrl +左键却不会保持,查看源码了解到鼠标点击选中与后台设置选中项有一个私有变量的值不同,该变量为_selectionAnchor,作用来记录上次在DataGrid的点击位置,当进行按shift or Ctrl +左键操作时,会使用该值,实现Ctrl及Shift的多选操作,为了实现后台选中到鼠标点击选中一样的行为,需要在后台设置选中后进行_selectionAnchor的设置,方法如下:

    //后台绑定datagrid的SelectionItem事件时,anchor为null,致使shift多选出错
            public static void FreshDataGridSelectionAnchor( this DataGrid datagrid)
            {
                if (null == datagrid)
                    return;
                if (datagrid.SelectedIndex < 0)
                    return;
                var anchorField = datagrid.GetType()
                                          .GetField( "_selectionAnchor" ,
                                                    BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic |
                                                    BindingFlags.ExactBinding);
                if (null == anchorField)
                    return;
                var anchorValue = anchorField.GetValue(datagrid);
                if (null == anchorValue)
                {
                    var row = (DataGridRow ) datagrid .ItemContainerGenerator.ContainerFromIndex( datagrid.SelectedIndex);
                    var presenter = GetVisualChild <DataGridCellsPresenter>( row);
                    var cell = (DataGridCell ) presenter .ItemContainerGenerator.ContainerFromIndex(0);
                    if (null == cell)
                        return;
                    anchorField.SetValue(datagrid , new DataGridCellInfo( cell));
                }
            }

      访方法执行后再进行shift及Ctrl操作的行为将与直接点击一致。

  • 相关阅读:
    校内题目T2695 桶哥的问题——吃桶
    一位大佬对学习哲理的思考
    P2845 [USACO15DEC]Switching on the Lights 开关灯
    CF911F Tree Destruction
    CF995C Leaving the Bar
    CF997B Roman Digits
    P1667 数列
    P4035 [JSOI2008]球形空间产生器
    P2679 子串
    P2613 【模板】有理数取余
  • 原文地址:https://www.cnblogs.com/maigc249/p/5110478.html
Copyright © 2011-2022 走看看