FrameworkElement.OnApplyTemplate Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывается всякий раз, когда код приложения или внутренние процессы (такие как перестроение передачи макета) вызывают Метод ApplyTemplate. Проще говоря, это означает, что метод вызывается непосредственно перед отображением элемента пользовательского интерфейса в приложении. Переопределите этот метод, чтобы повлиять на логику post-template по умолчанию класса.
protected:
virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()
Примеры
В этом примере показано переопределение OnApplyTemplate, определенное пользовательским элементом управления. Переопределение предназначено для учета вызывающих лиц, которые потенциально определяют и применяют собственный шаблон управления с помощью шаблона и системы стилей. В рамках своего определения элемент управления атрибутирует именованные элементы в обязательном шаблоне, например UpButton. Затем OnApplyTemplate извлекает ссылки на объекты на основе этого контракта именования при загрузке шаблона, вызывая Метод GetTemplateChild. (Заданные значения, например UpButtonElement, ссылаются на закрытые поля, определенные на уровне класса, чтобы другие члены класса могли ссылаться на данную часть как объект во время выполнения.) Кроме того, в этом примере вызывается частный метод UpdateStates
(определение не показано). Это еще один распространенный сценарий для OnApplyTemplate: убедитесь, что визуальное состояние задано для начального состояния элемента управления, в данном случае путем вызова частного метода, который учитывает все определенные состояния элемента управления и вызывает GoToState для задания соответствующего состояния.
protected override void OnApplyTemplate()
{
UpButtonElement = GetTemplateChild("UpButton") as RepeatButton;
DownButtonElement = GetTemplateChild("DownButton") as RepeatButton;
TextElement = GetTemplateChild("TextBlock") as TextBlock;
UpdateStates(false);
}
Protected Overloads Sub OnApplyTemplate()
UpButtonElement = TryCast(GetTemplateChild("UpButton"), RepeatButton)
DownButtonElement = TryCast(GetTemplateChild("DownButton"), RepeatButton)
TextElement = TryCast(GetTemplateChild("TextBlock"), TextBlock)
UpdateStates(False)
End Sub
Комментарии
Хотя OnApplyTemplate является методом, определенным классом FrameworkElement , поведение OnApplyTemplate и сценарии переопределения OnApplyTemplate в основном относятся к подклассу Control . Это связано с тем, что свойство Template, которое обычно определяется в XAML-файле, и внутренняя логика среда выполнения Windows, применяющая шаблоны, предназначены специально для элементов управления. Для ContentPresenter и ContentControl также существует специализированное поведение шаблона.
Примечания для разработчиков
Существует базовая реализация этого метода, реализованная как среда выполнения Windows внутреннее поведение, которое предоставляет некоторые базовые логики макета. Из реализации всегда следует вызывать базовую реализацию. Отказ ссылаться на базовую реализацию может привести к нежелательному поведению макета.
Производные классы могут использовать этот метод в качестве точки уведомления или входа в следующих сценариях:
- Создайте оставшуюся часть визуального дерева с помощью пользовательского кода.
- Выполнение кода, который может работать только после применения визуального дерева, определенного XAML из шаблонов. Например, код, который получает ссылки на именованные элементы, полученные из шаблона, путем вызова Метода GetTemplateChild, чтобы на элементы этих частей можно было ссылаться в другом коде среды выполнения после шаблона.
- Введите службы, которые имеют смысл существовать только после завершения визуального дерева из шаблонов.
- Присоединяйте определяемые классом обработчики событий к частям шаблона или родительскому элементу управления составного элемента управления. Например, может потребоваться, чтобы логика класса обрабатывала перенаправленные события KeyDown из части шаблона TextBox составного элемента управления. Это необходимо сделать так, чтобы состояния пользовательского интерфейса обновлялись на основе события низкоуровневого ввода части, а другие события, относящиеся к элементу управления и вызванные родительским элементом управления, были вызваны вместо этого.
- Установка состояний и свойств элементов в шаблоне, зависящих от других факторов. Например, значения свойств можно обнаружить, только зная родительский элемент или когда определенный производный класс использует общий шаблон. Однако обратите внимание, что хорошо спроектированный элемент управления должен обрабатывать свои визуальные состояния с помощью VisualStateManager. Дополнительные сведения об этой концепции см. в разделе Краткое руководство. Шаблоны элементов управления.
OnApplyTemplate часто является более подходящей точкой для обработки изменений в визуальном дереве, созданном шаблоном, чем событие Loaded . Событие Loaded может возникнуть до применения шаблона, а визуальное дерево может быть неполным по состоянию на загружено.