Compartilhar via


FrameworkElement.OnApplyTemplate Método

Definição

Invocado sempre que o código do aplicativo ou processos internos (como uma passagem de layout de recompilação) chamam ApplyTemplate. Em termos mais simples, isso significa que o método é chamado pouco antes de um elemento de interface do usuário ser exibido em seu aplicativo. Substitua esse método para influenciar a lógica pós-modelo padrão de uma classe.

protected:
 virtual void OnApplyTemplate() = OnApplyTemplate;
void OnApplyTemplate();
protected virtual void OnApplyTemplate();
function onApplyTemplate()
Protected Overridable Sub OnApplyTemplate ()

Exemplos

Este exemplo mostra uma substituição OnApplyTemplate definida por um controle personalizado. A substituição foi projetada para levar em conta os chamadores que potencialmente definem e aplicam seu próprio modelo de controle por meio do modelo e do sistema de estilo. Como parte de sua definição, o controle atribui os elementos nomeados dentro de um modelo que são necessários, como "UpButton". Em seguida, OnApplyTemplate recupera as referências de objeto com base nesse contrato de nomenclatura quando o modelo é carregado, chamando GetTemplateChild. (Os valores que estão sendo definidos, por exemplo, "UpButtonElement", referem-se a campos privados definidos no nível da classe para que outros membros da classe possam referenciar essa parte como um objeto em tempo de execução.) Além disso, este exemplo chama o método UpdateStates privado (definição não mostrada). Esse é outro cenário comum para OnApplyTemplate: garantir que o estado visual esteja definido para o estado inicial do controle, nesse caso, chamando um método privado que contabilize todos os estados definidos do controle e chame GoToState para definir o estado apropriado.

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

Comentários

Embora OnApplyTemplate seja um método definido pela classe FrameworkElement , o comportamento OnApplyTemplate e os cenários para substituir OnApplyTemplate são principalmente relevantes para uma subclasse control . Isso ocorre porque a propriedade Template que você normalmente define em um arquivo XAML e a lógica de Windows Runtime interna que aplica os modelos são especificamente para controles. Também existe um comportamento de modelo especializado para ContentPresenter e ContentControl.

Anotações aos implementadores

Há uma implementação base desse método implementada como um comportamento interno Windows Runtime, que fornece alguma lógica de layout básica. Você sempre deve chamar a implementação base de sua implementação. Não fazer referência à implementação base pode resultar em um comportamento de layout indesejável.

Classes derivadas podem usar esse método como uma notificação ou ponto de entrada para os seguintes cenários:

  • Crie o restante de uma árvore visual usando código personalizado.
  • Execute o código que só pode funcionar depois que a árvore visual definida por XAML dos modelos for aplicada. Por exemplo, código que obtém referências a elementos nomeados que vieram de um modelo, chamando GetTemplateChild, para que os membros dessas partes possam ser referenciados por outro código de runtime pós-modelo.
  • Introduza serviços que só fazem sentido existir após a conclusão da árvore visual dos modelos.
  • Anexe manipuladores de eventos definidos por classe a partes do modelo ou ao pai do controle de um controle composto. Por exemplo, talvez você queira que a lógica de classe manipule eventos KeyDown roteados de uma parte de modelo TextBox de um controle composto. Você faria isso para que os estados da interface do usuário sejam atualizados com base no evento de entrada de baixo nível da parte e outros eventos específicos ao seu controle e gerados pelo pai do controle sejam gerados.
  • Defina estados e propriedades de elementos dentro do modelo que dependem de outros fatores. Por exemplo, os valores de propriedade só podem ser detectáveis conhecendo o elemento pai ou quando uma classe derivada específica usa um modelo comum. No entanto, observe que um controle bem projetado deve lidar com seus estados visuais com VisualStateManager. Para obter mais informações sobre esse conceito, consulte Início Rápido: Modelos de controle.

OnApplyTemplate geralmente é um ponto mais apropriado para lidar com ajustes na árvore visual criada pelo modelo do que o evento Loaded . O evento Loaded pode ocorrer antes do modelo ser aplicado e a árvore visual pode estar incompleta a partir de Loaded.

Aplica-se a

Confira também