我想在wpf中的特定单元格中设置一个值 我使用此代码,但getRow和getCell方法显示此错误
公共部分类UCfrmRaafaLevelsUp中的'数据网格'不包含' GetRow'的定义并没有延伸方法' GetRow'接受类型' DataGrid'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
'数据网格'不包含' GetCell'的定义和不 扩展方法' GetCell'接受第一个类型的参数 '数据网格'可以找到(你是否错过了使用指令或 汇编参考?)ControlSolution.Form
和错误:UserControl
扩展方法必须在非泛型静态类中定义
我使用它的代码
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;
}
public static DataGridRow GetSelectedRow(this DataGrid grid)
{
return (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);
}
public static DataGridRow GetRow(this DataGrid grid, int index)
{
DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null)
{
// May be virtualized, bring into view and try again.
grid.UpdateLayout();
grid.ScrollIntoView(grid.Items[index]);
row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
}
return row;
}
public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column)
{
if (row != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
if (presenter == null)
{
grid.ScrollIntoView(row, grid.Columns[column]);
presenter = GetVisualChild<DataGridCellsPresenter>(row);
}
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
return cell;
}
return null;
}
public static DataGridCell GetCell(this DataGrid grid, int row, int column)
{
DataGridRow rowContainer = grid.GetRow(row);
return grid.GetCell(rowContainer, column);
}
答案 0 :(得分:2)
扩展方法是静态方法,在它们创建的类型上被称为实例方法。例如:您创建的GetCell()方法。它使用DataGrid的引用来调用此方法。 必须在单独的静态类中定义此类方法。将这些方法GetSelectedRow,GetCell,GetRow放在不同的静态类中,代码应该可以工作。
答案 1 :(得分:-1)
扩展方法必须是继承链的一部分。如果你的方法是在一个单独的类(不是DataGrid,既不是父类也不是子类),那么只需使它成为普通的静态方法,并静态调用此方法。
逻辑上,你不能向DataGrid本身及其祖先类添加扩展方法,并且它看起来不像是继承DataGrid,所以这不会起作用。