• WPF:获取DataGrid控件单元格DataGridCell



    /* ----------------------------------------------------------
    文件名称:DataGridPlus.cs

    作者:秦建辉

    MSN:splashcn@msn.com
    QQ:36748897

    博客:http://blog.csdn.net/jhqin

    开发环境:
    Visual Studio V2010
    .NET Framework 4 Client Profile

    版本历史:
    V1.0 2012年06月07日
    WPF DataGrid控件扩展方法

    参考资料:
    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b7299e55-92e2-4a6b-8987-869fef8f22eb/
    ------------------------------------------------------------ */
    using System.Windows.Controls;
    using System.Windows.Controls.Primitives;
    using System.Windows.Media;

    namespace Splash.WPF
    {
    public static class DataGridPlus
    {
    /// <summary>
    /// 获取DataGrid控件单元格
    /// </summary>
    /// <param name="dataGrid">DataGrid控件</param>
    /// <param name="rowIndex">单元格所在的行号</param>
    /// <param name="columnIndex">单元格所在的列号</param>
    /// <returns>指定的单元格</returns>
    public static DataGridCell GetCell(this DataGrid dataGrid, int rowIndex, int columnIndex)
    {
    DataGridRow rowContainer = dataGrid.GetRow(rowIndex);
    if (rowContainer != null)
    {
    DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
    DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
    if (cell == null)
    {
    dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[columnIndex]);
    cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
    }
    return cell;
    }
    return null;
    }

    /// <summary>
    /// 获取DataGrid的行
    /// </summary>
    /// <param name="dataGrid">DataGrid控件</param>
    /// <param name="rowIndex">DataGrid行号</param>
    /// <returns>指定的行号</returns>
    public static DataGridRow GetRow(this DataGrid dataGrid, int rowIndex)
    {
    DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
    if (rowContainer == null)
    {
    dataGrid.UpdateLayout();
    dataGrid.ScrollIntoView(dataGrid.Items[rowIndex]);
    rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
    }
    return rowContainer;
    }

    /// <summary>
    /// 获取父可视对象中第一个指定类型的子可视对象
    /// </summary>
    /// <typeparam name="T">可视对象类型</typeparam>
    /// <param name="parent">父可视对象</param>
    /// <returns>第一个指定类型的子可视对象</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;
    }
    }
    }

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/sjqq/p/8335318.html
Copyright © 2020-2023  润新知