Как создается экземпляр ControlTemplate в XAML? - PullRequest
3 голосов
/ 02 марта 2011

В коде ControlTemplate содержится иерархия FrameworkElementFactory, которую можно использовать для построения самих элементов каркаса.Но в XAML содержимое ControlTemplate отображается в виде самих элементов.

Преобразует ли анализатор XAML из одной формы объекта в другую, используется ValueConverter или действительно создаетфабрики как он разбирает ControlTemplate контент?

1 Ответ

3 голосов
/ 04 марта 2011

На самом деле это делается по-другому, если оно определено в XAML, а не в коде.Для проверки вы можете создать простой проект в WPF с одним окном и добавить пользовательский элемент управления с шаблоном ControlTemplate, определенным в XAML его стилем по умолчанию.Затем добавьте элемент управления в ваше окно и добавьте кнопку, в обработчик которой Click входит точка останова.

Когда достигается точка останова, мы можем проверить пользовательский элемент управления и его ControlTemplate.Свойство VisualTree (то есть FrameworkElementFactory) имеет значение null.

Используя Reflector, мы можем увидеть соответствующий код в методе StyleHelper.ApplyTemplateContent.Первый оператор if в этом методе применяет FrameworkElementFactory (который передается из VisualTreeProperty).Второй оператор if загружает ControlTemplate из XAML, который в конечном итоге выполняет FrameworkTEmplate.LoadOptimizedTemplateContent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...