以编程方式编辑 wpf 中的数据网格单元格

发布于 2024-12-16 11:39:24 字数 197 浏览 1 评论 0原文

我想编辑单元格不是它的值而是它的背景颜色。我知道 rowIndex 和 columnIndex。但穿越网格是一个困难的部分。我只想要

DataGrid.Rows[0][3].BackgroundColor=WhateverIWant

之类的东西,即使在 VisualTreeHelper 的帮助下循环也可以,但请指导我完成它。

谢谢

I want to edit the cell not its value but its background color. I know the rowIndex and the columnIndex. But to travese through the grid is a hard part. I just want something like

DataGrid.Rows[0][3].BackgroundColor=WhateverIWant

Even looping with the help of VisualTreeHelper will work, but kindly guide me through it.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深巷少女 2024-12-23 11:39:24

使用以下方法:

public static DataGridCell GetDataGridCell(DataGrid grid, int rowIndex, int colIndex)
{
            DataGridCell result = null;
            DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
            if (row != null)
            {

                    DataGridCellsPresenter presenter = GetFirstVisualChild<DataGridCellsPresenter>(row);
                    result = presenter.ItemContainerGenerator.ContainerFromIndex(colIndex) as DataGridCell;

            }

            return result;
}

public static T GetFirstVisualChild<T>(DependencyObject depObj)
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }

                    T childItem = GetFirstVisualChild(child);
                    if (childItem != null) return childItem;
                }
            }

            return null;
        }

您也可以将其作为 DataGrid 上的扩展方法

Use following method:

public static DataGridCell GetDataGridCell(DataGrid grid, int rowIndex, int colIndex)
{
            DataGridCell result = null;
            DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
            if (row != null)
            {

                    DataGridCellsPresenter presenter = GetFirstVisualChild<DataGridCellsPresenter>(row);
                    result = presenter.ItemContainerGenerator.ContainerFromIndex(colIndex) as DataGridCell;

            }

            return result;
}

public static T GetFirstVisualChild<T>(DependencyObject depObj)
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }

                    T childItem = GetFirstVisualChild(child);
                    if (childItem != null) return childItem;
                }
            }

            return null;
        }

You can also make it as extension method on DataGrid

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文