zoukankan      html  css  js  c++  java
  • DataGrid 獲取 制定 row Col 單元格

    public static class DataGridHelper
        {
            /// <summary>         
            /// Gets the visual child of an element         
            /// </summary>         
            /// <typeparam name="T">Expected type</typeparam>         
            /// <param name="parent">The parent of the expected element</param>         
            /// <returns>A visual child</returns>         
            public static T GetVisualChild<T>(Visual parent) where T : Visual
            {
                T child default(T);
                int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < numVisuals; i++)
                {
                    Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                    child = v as T;
                    if (child == null)
                    {
                        child = GetVisualChild<T>(v);
                    }
                    if (child != null)
                    {
                        break;
                    }
                }
                return child;
            }
     
            /// <summary>
            /// Gets the specified cell of the DataGrid
            /// </summary>
            /// <param name="grid">The DataGrid instance</param>
            /// <param name="row">The row of the cell</param>
            /// <param name="column">The column index of the cell</param>
            /// <returns>A cell of the DataGrid</returns>
            public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column)
            {
                if (row != null)
                {
                    DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
                    if (presenter == null)
                    {
                        grid.ScrollIntoView(row, grid.Columns[column]);
                        presenter = GetVisualChild<DataGridCellsPresenter>(row);
                    }
                    DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                    return cell;
                }
                return null;
            }
            /// <summary>
            /// Gets the specified cell of the DataGrid
            /// </summary>
            /// <param name="grid">The DataGrid instance</param>
            /// <param name="row">The row index of the cell</param>
            /// <param name="column">The column index of the cell</param>
            /// <returns>A cell of the DataGrid</returns>
            public static DataGridCell GetCell(this DataGrid grid, int row, int column)
            {
                DataGridRow rowContainer = grid.GetRow(row);
                return grid.GetCell(rowContainer, column);
            }
            /// <summary>
            /// Gets the specified row of the DataGrid
            /// </summary>
            /// <param name="grid">The DataGrid instance</param>
            /// <param name="index">The index of the row</param>
            /// <returns>A row of the DataGrid</returns>
            public static DataGridRow GetRow(this DataGrid grid, int index)
            {
                DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
                if (row == null)
                {
                    // May be virtualized, bring into view and try again.
                    grid.UpdateLayout();
                    grid.ScrollIntoView(grid.Items[index]);
                    row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
                }
                return row;
            }
            /// <summary>
            /// Gets the selected row of the DataGrid
            /// </summary>
            /// <param name="grid">The DataGrid instance</param>
            /// <returns></returns>
            public static DataGridRow GetSelectedRow(this DataGrid grid)
            {
                return (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);
            }
        }
  • 相关阅读:
    基于OEA框架的客户化设计(三) “插件式”DLL
    小技巧、小工具列表
    OEA中的AutoUI重构(3) 评审会议后的设计
    基于OEA框架的客户化设计(一) 总体设计
    数据层扩展包EFCachingProvider 总结
    中国软件工程大会总结
    性能优化总结(二):聚合SQL
    招 .Net 开发人员 (北京) 已招满
    War3Share开源
    正则表达式:匹配字符串中除了"abc"以外的所有其它部分
  • 原文地址:https://www.cnblogs.com/CoreXin/p/4385946.html
Copyright © 2011-2022 走看看