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