Wpf 查找作为通过代码生成的默认控件模板组合框一部分的TextBlock

Wpf 查找作为通过代码生成的默认控件模板组合框一部分的TextBlock,wpf,combobox,controltemplate,visualtreehelper,Wpf,Combobox,Controltemplate,Visualtreehelper,我试图找到组合框控件模板中的TextBlock。 仅当组合框以XAML声明时,使用VisualTreeHelpar.GetChildrenCount才有效。在这种情况下,GetChildrenCount返回1,并且可以进行递归搜索 但是,如果我使用分配的代码将组合声明为窗口类的成员,并将其设置为其位置,则函数GetChildrenCount返回0。当我在这个场景中运行snoop时,它显示了组合子层次结构。我希望能够像snoop一样搜索组合框 任何帮助都将不胜感激 代码: 调用ComboBox的A

我试图找到组合框控件模板中的TextBlock。 仅当组合框以XAML声明时,使用VisualTreeHelpar.GetChildrenCount才有效。在这种情况下,GetChildrenCount返回1,并且可以进行递归搜索

但是,如果我使用分配的代码将组合声明为窗口类的成员,并将其设置为其位置,则函数GetChildrenCount返回0。当我在这个场景中运行snoop时,它显示了组合子层次结构。我希望能够像snoop一样搜索组合框

任何帮助都将不胜感激

代码:


调用ComboBox的ApplyTemplate方法。然后,你应该能够找到你需要的东西。

谢谢“这在一定程度上有所帮助,我能够深入浏览视觉树。但当我在组合框中访问ContentPresenter元素时,snoop显示它有一个子元素,这是一个文本块,而VisualTreeHelper.GetChildrenCount返回0,即使在调用VisualTreeHelper.GetChildrenCount之前我显式调用ContentPresenter本身上的ApplyTemplate。再说一遍,我怎样才能到达这个文本块?
ComboBox mCombo = null;

private void Windows_Loaded(object sender, RoutedEventArgs e)

{

mCombo = new ComboBox;

   mGrid.Children.Add(mCombo);

   Grid.SetRow(mCombo,0);

   int count =  VisualTreeHelpar.GetChildrenCount(mCombo);

}