FrameworkElement.OnApplyTemplate Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se invoca cada vez que el código de aplicación o los procesos internos (como un pase de diseño de regeneración) llaman a ApplyTemplate. En términos más sencillos, esto significa que se llama al método justo antes de que se muestre un elemento de interfaz de usuario en la aplicación. Invalide este método para influir en la lógica predeterminada posterior a la plantilla de una clase.
protected:
virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()
Ejemplos
En este ejemplo se muestra una invalidación de OnApplyTemplate definida por un control personalizado. La invalidación está diseñada para tener en cuenta a los autores de llamadas que pueden definir y aplicar su propia plantilla de control a través del sistema de estilos y plantillas. Como parte de su definición, el control atribuye los elementos con nombre dentro de una plantilla necesaria, como "UpButton". A continuación, OnApplyTemplate recupera las referencias de objeto basadas en este contrato de nomenclatura cuando se carga la plantilla, llamando a GetTemplateChild. (Los valores que se establecen, por ejemplo"UpButtonElement", hacen referencia a campos privados definidos en el nivel de clase para que otros miembros de la clase puedan hacer referencia a esa parte como un objeto en tiempo de ejecución). Además, en este ejemplo se llama al método UpdateStates
privado (la definición no se muestra). Este es otro escenario común para OnApplyTemplate: asegurarse de que el estado visual está establecido para el estado inicial del control, en este caso llamando a un método privado que tenga en cuenta todos los estados definidos del control y llame a GoToState para establecer el estado adecuado.
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
Comentarios
Aunque OnApplyTemplate es un método definido por la clase FrameworkElement , el comportamiento OnApplyTemplate y los escenarios para invalidar OnApplyTemplate son principalmente relevantes para una subclase Control . Esto se debe a que la propiedad Template que se define normalmente en un archivo XAML y la lógica de Windows Runtime interna que aplica las plantillas son específicamente para los controles. También existe un comportamiento de plantilla especializado para ContentPresenter y ContentControl.
Notas para los implementadores
Hay una implementación base de este método implementada como un comportamiento interno Windows Runtime, que proporciona cierta lógica de diseño básica. Siempre debe llamar a la implementación base desde la implementación. Si no se hace referencia a la implementación base, podría producirse un comportamiento de diseño no deseado.
Las clases derivadas pueden usar este método como un punto de entrada o notificación para los siguientes escenarios:
- Compile el resto de un árbol visual mediante código personalizado.
- Ejecute código que solo puede funcionar una vez aplicado el árbol visual definido por XAML a partir de plantillas. Por ejemplo, el código que obtiene referencias a elementos con nombre procedentes de una plantilla mediante una llamada a GetTemplateChild, para que otros código en tiempo de ejecución posterior a la plantilla puedan hacer referencia a los miembros de estos elementos.
- Introduzca los servicios que solo tienen sentido existir una vez completado el árbol visual de las plantillas.
- Adjunte controladores de eventos definidos por clases a partes de la plantilla o al control primario de un control compuesto. Por ejemplo, es posible que desee que la lógica de clase controle los eventos KeyDown enrutados desde una parte de plantilla textBox de un control compuesto. Lo haría para que los estados de la interfaz de usuario se actualicen en función del evento de entrada de bajo nivel del elemento y otros eventos específicos del control y generados por el elemento primario del control se generan en su lugar.
- Establezca estados y propiedades de elementos dentro de la plantilla que dependen de otros factores. Por ejemplo, los valores de propiedad solo se pueden detectar sabiendo el elemento primario o cuando una clase derivada específica usa una plantilla común. Sin embargo, tenga en cuenta que un control bien diseñado debe controlar sus estados visuales con VisualStateManager. Para obtener más información sobre este concepto, consulta Inicio rápido: Plantillas de control.
OnApplyTemplate suele ser un punto más adecuado para tratar los ajustes en el árbol visual creado por la plantilla que el evento Loaded . El evento Loaded puede producirse antes de aplicar la plantilla y el árbol visual podría estar incompleto a partir de Loaded.