zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    }

  • 相关阅读:
    一些必不可少的Sublime Text 2插件
    sublime text 使用小技巧
    Azure Queue 和 Service Bus Queue的比较
    怎么使用Windows Azure Queue Storage 服务
    配置 SharePoint 2010 使用本机默认 SQL Server 实例 Pan
    将两个字符串中相同的地方str2无重复的输出
    javascript笔记
    C#中怎样使控件随着窗体一起变化大小(拷来学习)
    在pictureBox中画方格矩阵地图,方法比较笨,有好方法望指导
    通过一个小推理写出的程序,结果出乎意料……有哪位知道为什么吗 已解决
  • 原文地址:https://www.cnblogs.com/sjqq/p/8335318.html
Copyright © 2011-2022 走看看