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

效果图:

 

 

添加扩展类

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属性。

 

posted @ 2020-11-18 13:58  liuyong111  阅读(1960)  评论(0编辑  收藏  举报