Я использую datagrid с 32 строками, и когда я пытаюсь использовать этот GetCell (28,2), его сбой, а также в строке 28-32 возникает та же проблема.WPF visualtreehelper.getchildrencount возвращает 0 на datagrid
это один: visualtreehelper.getchildrencount
возвращение 0, когда его выше строка 28.
Я считаю, что если я скатываться к скрытым строкам на сетке я могу получить эти строки с GetCell() и его работа отлично.
как я могу это сделать без опрокидывания?
public DataGridCell GetCell(int row, int column)
{
DataGridRow rowContainer = GetRow(row);
if (rowContainer != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
if (cell == null)
{
datagrid_arinc_const.ScrollIntoView(rowContainer, datagrid_arinc_const.Columns[column]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
}
return cell;
}
return null;
}
public DataGridRow GetRow(int index)
{
DataGridRow row = (DataGridRow)datagrid_arinc_const.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null)
{
datagrid_arinc_const.UpdateLayout();
datagrid_arinc_const.ScrollIntoView(datagrid_arinc_const.Items[index]);
row = (DataGridRow)datagrid_arinc_const.ItemContainerGenerator.ContainerFromIndex(index);
}
return row;
}
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;
}
Что вы пытаетесь сделать, потому что, скорее всего, вы не должны пытаться использовать этот подход в первую очередь. – Shoe
По умолчанию виртуализация включена для Datagrid, что означает, что генерируются только видимые контейнеры. Если вы хотите получить dataGridRow или ячейку, которая не видна, вам нужно прокручивать вниз до этой строки вручную из кода позади, чтобы его контейнер был сгенерирован или вам нужно отключить виртуализацию пользовательского интерфейса на dataGrid (в случае, если вы не хотите прокручивать вниз). –
@RohitVats спасибо! Я прокручиваю вручную из кода и его работу хорошо. – mmm