FrameworkElement.OnApplyTemplate Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывается всякий раз, когда код приложения или внутренние процессы (например, перестроение прохода макета) вызывают ApplyTemplate. В самых простых терминах это означает, что метод вызывается непосредственно перед отображением элемента пользовательского интерфейса в приложении. Переопределите этот метод, чтобы повлиять на логику после шаблона по умолчанию класса.
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);
}
Комментарии
Хотя OnApplyTemplate это метод, определенный классом FrameworkElement , OnApplyTemplate поведение и сценарии переопределения OnApplyTemplate в основном относятся к подклассу Control . Это связано с тем, что свойство шаблона, которое обычно определяется в XAML-файле и внутренней логике среда выполнения Windows, применяющей шаблоны, специально для элементов управления. Специализированное поведение шаблона также существует для ContentPresenter и ContentControl.
Заметки для разработчиков
Существует базовая реализация этого метода, реализованная как среда выполнения Windows внутреннее поведение, которое обеспечивает некоторую базовую логику макета. Вы всегда должны вызывать базовую реализацию из реализации. Не удается ссылаться на базовую реализацию, может привести к нежелательному поведению макета.
Производные классы могут использовать этот метод в качестве точки уведомления или входа для следующих сценариев:
- Создайте оставшуюся часть визуального дерева с помощью пользовательского кода.
- Запустите код, который может работать только после применения визуального дерева XAML из шаблонов. Например, код, который получает ссылки на именованные элементы, полученные из шаблона, путем вызова GetTemplateChild, чтобы на элементы этих частей могли ссылаться другие код среды выполнения после шаблона.
- Введите службы, которые могут существовать только после завершения визуального дерева из шаблонов.
- Присоединение обработчиков событий, определенных классом, к частям шаблона или родительскому элементу управления составного элемента управления. Например, может потребоваться, чтобы логика класса обрабатывала перенаправленные события KeyDown из части шаблона TextBox составного элемента управления. Это можно сделать так, чтобы состояния пользовательского интерфейса обновлялись на основе низкоуровневого входного события части, а другие события, относящиеся к вашему элементу управления и создаваемые родительским элементом управления, создаются вместо этого.
- Задайте состояния и свойства элементов в шаблоне, зависящие от других факторов. Например, значения свойств могут быть обнаруживаемыми, зная родительский элемент или когда определенный производный класс использует общий шаблон. Однако обратите внимание, что хорошо разработанный элемент управления должен обрабатывать свои визуальные состояния с помощью VisualStateManager. Дополнительные сведения об этой концепции см. в шаблонах элементов управления XAML.
OnApplyTemplate часто является более подходящей точкой, чтобы справиться с корректировками в созданном шаблоном визуальном дереве, чем это событие Loaded . Событие loaded может возникать до применения шаблона, и визуальное дерево может быть неполным по мере загрузки.