Как заменить часть ControlTemplate во время выполнения в Silverlight 3? - PullRequest
1 голос
/ 10 января 2010

Я пишу пользовательский элемент управления, который использует шаблон, определенный в разделе ресурсов моего XAML, и я хотел бы заменить одну или несколько частей шаблона в экземпляре моего элемента управления во время выполнения.

ДляНапример, если в шаблоне элемента управления есть часть с именем «ActivePart», как заменить FrameworkElement элемента ActivePart в экземпляре элемента управления новым FrameworkElement?

Я понимаю, что свойство Control.Template доступно для записи,но я предпочел бы найти способ заменить определенную часть этого шаблона, а не создавать совершенно новый, хотя было бы приемлемо решение, которое редактирует существующий шаблон путем замены соответствующей именованной части.

IЯ использую C # и должен делать это во время выполнения с использованием любого FrameworkElement, поэтому я не ищу решения или предложения на основе XAML, спасибо!

PS Я знаю, что GetTemplateChild() возвращает FrameworkElement для именованной части шаблона в экземпляре элемента управления, но я не вижу, как это поможетЯ должен заменить эту часть новым FrameworkElement.

1 Ответ

1 голос
/ 11 января 2010

Полагаю, я упустил очевидное!

После OnApplyTemplate вызывается из вашего производного элемента управления, VisualTreeHelper.GetChild (this, 0) возвращает корневой объект визуального дерева экземпляра шаблона, из которого вы можете использовать коллекцию Children (если ваш элемент управления Шаблон создан на основе Panel (например, Canvas, Grid и т. д.) для добавления / удаления / изменения любых дочерних частей шаблона в соответствии с вашими пожеланиями.

До вызова OnApplyTemplate для элемента управления не существует визуального дерева, и VisualTreeHelper.GetChildrenCount возвращает 0.

...