rohith naik Ответов: 2

Выделение ячеек в WPF DataGrid


Я использую приведенный ниже метод для выделения ячеек из моего кода для моей таблицы данных. Но проблема в том, что когда я прокручиваю вне поля зрения, выделенные ячейки теряются и прыгают вокруг. У меня есть набор строк и столбцов виртуализации в false. пожалуйста помочь.

public void ColourCell(int row, int column, Color color, bool HighlightFlag = true)
        {
            DataGridRow rowContainer = GetRow(row);

            if (rowContainer != null)
            {
                DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
                // try to get the cell but it may possibly be virtualized but enable virtualizion is off
                DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                // now try to bring into view and retreive the cell
                if (cell != null)
                {
                    if (HighlightFlag == false)
                        cell.Background = new SolidColorBrush(Colors.MediumPurple);
                    else
                    {
                        cell.Background = new SolidColorBrush(color);
                    }
                }
            }
        }



public DataGridRow GetRow(int index)
        {
            DataGridRow row = (DataGridRow)DataGridControl.ItemContainerGenerator.ContainerFromIndex(index);
            if (row == null)
            {
                row = (DataGridRow)DataGridControl.ItemContainerGenerator.ContainerFromIndex(index);
            }
            return row;
        }



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

2 Ответов

Рейтинг:
2

Shamim Ahamed Pavel

Этот код поможет вам.

private void GetCell(DataGridRow row, DataGridColumn column)
{

    DependencyObject parent = row;

    Lable1:

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var item = VisualTreeHelper.GetChild(parent, i);
        if (item is DataGridCellsPresenter)
        {
            DataGridCellsPresenter presenter = item as DataGridCellsPresenter;

            DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromIndex(1) as DataGridCell;

            cell.Background = Brushes.Red;

            break;
        }
        else
        {
            parent = item;
            goto Lable1;
        }
    }
}


CHill60

Всего на 4 года позже

Рейтинг:
0

Kenneth Haugland

Версия XAML намного лучше:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a5fd5413-f055-4b56-83af-6d6bdb1d6fe9/[^]


rohith naik

Пожалуйста, помогите мне с проблемой, которая у меня есть. Ваша ссылка почти полностью неуместна.

Kenneth Haugland

На самом деле я так не думаю, с IValueConverter я не думаю, что ваша проблема возникнет.

rohith naik

Можете ли вы хотя бы сказать мне, почему вы думаете, что использование IValueConverter поможет моей проблеме ?

Graeme_Grant

Элементы управления WPF работают лучше всего, если вы используете привязку данных.

IValueConverter или IMultiValueConverter используют переданное значение и выводят измененное значение с помощью привязки данных. Таким образом, вы можете передать любое значение в конвертер и вывести вычисленное значение для этого свойства.

rohith naik

Кроме того, я не использую XAML, так как существует очень сложная логика, к которой я хочу выделить ячейки. Это прекрасно работает, если datagrid помещается в "одну страницу", то есть нет необходимости прокручивать. Но если я прокручиваю вниз и теряю из виду ячейку, изменение фона, которое я сделал, прыгает вокруг.