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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM