我有一个ItemsControl,其中的ItemsPanelTemplate是Grid。
但是,如果在显示UserControl之前调用此方法,则返回null,因此我无法访问“grid”,当UserControl出现时,它的显示方式并不像我预期的那样。
我尝试了谷歌,但我找到的所有内容都是假设VisualTree直到在表单上显示ItemControl后才会构建。
有什么建议吗? 谢谢,对语言表达不好感到抱歉 ;)
<ItemsControl ItemsSource="{Binding CellCollection}" Name="CellGrid">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="grid" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
我在代码后台创建了一些包含ItemControl的UserControl,然后需要创建RowDefinitions和ColumnDefinitons。我使用以下方法获取"grid":
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,因此我无法访问“grid”,当UserControl出现时,它的显示方式并不像我预期的那样。
我尝试了谷歌,但我找到的所有内容都是假设VisualTree直到在表单上显示ItemControl后才会构建。
有什么建议吗? 谢谢,对语言表达不好感到抱歉 ;)
FindVisualChild
?是在构造函数、Loaded事件或其他什么时候? - Steve