ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WPF datagrid设置指定单元格的背景色和Enable

2020-11-18 14:02:21  阅读:225  来源: 互联网

标签:dataGrid Enable rowContainer DataGrid cell datagrid child null 单元格


效果图:

 

 

添加扩展类

public static class DataGridExtend

    {

        /// <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;

        }

    }

用法:

 var cell = grid.GetCell(2,3);
            if (cell != null)
            {
                cell.IsEnabled = false;
                cell.Background = Brushes.LightGray;
            }

以上是设置datagrid第三行第四列单元格的背景色和Enable属性。

 

标签:dataGrid,Enable,rowContainer,DataGrid,cell,datagrid,child,null,单元格
来源: https://www.cnblogs.com/czly/p/13999412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有