Поиск TextBlock, который является частью шаблона элемента управления по умолчанию ComboBox, созданного с помощью кода

Я пытаюсь найти TextBlock внутри шаблона элемента управления comboBox. using VisualTreeHelpar.GetChildrenCount работает только в том случае, если comboBox объявлен в XAML. В этом случае GetChildrenCount возвращает 1 и возможен рекурсивный поиск.

Однако, если я объявляю комбо как член класса Window с использованием кода, выделенного и устанавливающего его на свое место, функция GetChildrenCount вернет 0. Когда я запускаю snoop в этом сценарии, он показывает иерархию дочерних комбо. Я хочу иметь возможность искать в comboBox так же, как это делает snoop.

Любая помощь будет оценена.

код:

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);

}

person uriya    schedule 29.04.2010    source источник


Ответы (1)


Вызовите метод ApplyTemplate для ComboBox. Тогда вы сможете найти то, что вам нужно.

person Timores    schedule 29.04.2010
comment
спасибо, что до некоторой степени помогает, и я могу углубиться в визуальное дерево. Тем не менее, когда я добираюсь до элемента ContentPresenter в ComboBox, snoop показывает, что у него есть 1 дочерний элемент, который является TextBlock, тогда как VisualTreeHelper.GetChildrenCount возвращает 0, даже когда я явно вызываю ApplyTemplate на самом ContentPresenter перед вызовом VisualTreeHelper.GetChildrenCount. Итак, еще раз, как я могу добраться до этого TextBlock? - person uriya; 29.04.2010