问题:做一个区域选择的功能,要求更够针对DataGrid中的某一行,勾选其中的几列(DataGridCheckBoxColumn),纠结在与如何获得具体的行数和列数,WPF中有Columns属性,但是没有单独的Rows属性
解决方法:利用可视化树的概念,以及ItemContainerGenerator.ContainerFromIndex(int)的方法,获取对应的单元格,详情见代码
// 从可视化树中获取到需要的子控件
private T GetVisualChild<T>(DependencyObject 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);
else
break;
}
return child;
}