Compartir a través de


FrameworkElement.OnApplyTemplate Método

Definición

Se invoca cada vez que el código de aplicación o los procesos internos (como un paso 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 de plantilla posterior predeterminada 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 OnApplyTemplate invalidación definida por un control personalizado. La invalidación está diseñada para tener en cuenta que los autores de llamadas 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 que son necesarias, 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 (no se muestra la definición). Este es otro escenario común para OnApplyTemplate: asegúrese 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);
}

Comentarios

Aunque OnApplyTemplate es un método definido por la clase FrameworkElement , el OnApplyTemplate comportamiento 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íficas para los controles. El comportamiento de la plantilla especializada también existe para ContentPresenter y ContentControl.

Notas para los implementadores

Hay una implementación base de este método implementada como un comportamiento interno de 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, se podría producir 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 escenarios siguientes:

  • Compile el resto de un árbol visual mediante código personalizado.
  • Ejecute código que solo pueda funcionar una vez que se haya aplicado el árbol visual definido por XAML de las plantillas. Por ejemplo, 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 quiera que la lógica de clase controle los eventos KeyDown enrutados desde una parte de la 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 mediante el conocimiento del 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 Plantillas de control XAML.

OnApplyTemplate suele ser un punto más adecuado para tratar los ajustes en el árbol visual creado por 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.

Se aplica a

Consulte también