我有 ItemsControl 和 Grid 作为 ItemsPanelTemplate
<ItemsControl ItemsSource="{Binding CellCollection}" Name="CellGrid">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="grid" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
我在代码隐藏中用这个 ItemControl 创建了一些 UserControl,然后我需要创建 RowDefinitions 和 ColumnDefinitons。我使用这种方法来获取“网格”:
private TChildItem FindVisualChild<TChildItem>(DependencyObject obj) where TChildItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
var child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is TChildItem)
return (TChildItem)child;
var childOfChild = FindVisualChild<TChildItem>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}
但是,如果我在显示 UserControl 之前调用此方法,它将返回 null,因此我无法找到访问“网格”,并且当 UserControl 出现时,它的显示与我预期的不同。
我试图用谷歌搜索,但我发现的只是假设 VisualTree 不会为 ItemControl 构建,直到它显示在表单上。
有什么建议么?感谢和抱歉英语不好;)