2010-01-10 8 views
1

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

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

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

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

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

+0

@Duckboy: Пожалуйста, не используйте комментарии для почтовых скриптов. Если у вас есть что добавить к вашему вопросу, тогда отредактируйте свой вопрос и добавьте основную часть вашего вопроса. – AnthonyWJones

+0

@ Энтони - спасибо, сделано. Любой вход на вопрос сам? – Duckboy

ответ

1

Наверное, мне не хватало очевидного!

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

Перед OnApplyTemplate называется, не Визуальное дерево не существует для контроля, и VisualTreeHelper.GetChildrenCount возвращает 0.