FrameworkElement.OnApplyTemplate Metodo

Definizione

Richiamato ogni volta che il codice dell'applicazione o i processi interni ,ad esempio un passaggio di layout di ricompilazione, chiama ApplyTemplate. In termini più semplici, questo significa che il metodo viene chiamato subito prima che venga visualizzato un elemento dell'interfaccia utente nella tua app. Eseguire l'override di questo metodo per influenzare la logica post-modello predefinita di una classe.

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

Esempio

In questo esempio viene illustrato un override OnApplyTemplate definito da un controllo personalizzato. L'override è progettato per tenere conto dei chiamanti che potenzialmente definiscono e applicano il proprio modello di controllo tramite il modello e il sistema di stile. Come parte della definizione, il controllo attributi gli elementi denominati all'interno di un modello necessari, ad esempio "UpButton". OnApplyTemplate recupera quindi i riferimenti all'oggetto in base a questo contratto di denominazione quando il modello viene caricato, chiamando GetTemplateChild. I valori impostati, ad esempio "UpButtonElement", fanno riferimento a campi privati definiti a livello di classe in modo che altri membri della classe possano fare riferimento a tale parte come oggetto in fase di esecuzione. In questo esempio viene anche chiamato il metodo UpdateStates privato (definizione non visualizzata). Si tratta di un altro scenario comune per OnApplyTemplate: assicurarsi che lo stato di visualizzazione sia impostato per lo stato iniziale del controllo, in questo caso chiamando un metodo privato che conti per tutti gli stati definiti del controllo e chiama GoToState per impostare lo stato appropriato.

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

Commenti

Sebbene OnApplyTemplate sia un metodo definito dalla classe FrameworkElement , il comportamento OnApplyTemplate e gli scenari per l'override di OnApplyTemplate sono principalmente rilevanti per una sottoclasse Control . Ciò è dovuto al fatto che la proprietà Template definita in genere in un file XAML e la logica Windows Runtime interna che applica i modelli sono specifiche per i controlli. Esiste anche un comportamento di modello specializzato per ContentPresenter e ContentControl.

Note per gli implementatori

Esiste un'implementazione di base di questo metodo implementata come comportamento interno Windows Runtime, che fornisce una logica di layout di base. È consigliabile chiamare sempre l'implementazione di base dall'implementazione. Se non si fa riferimento all'implementazione di base, potrebbe verificarsi un comportamento di layout indesiderato.

Le classi derivate possono usare questo metodo come notifica o punto di ingresso per gli scenari seguenti:

  • Compilare il resto di una struttura ad albero visuale usando codice personalizzato.
  • Eseguire il codice che può funzionare solo dopo l'applicazione della struttura ad albero visuale definita da XAML dai modelli. Ad esempio, il codice che ottiene riferimenti a elementi denominati provenienti da un modello, chiamando GetTemplateChild, in modo che i membri di queste parti possano fare riferimento ad altri codice di runtime post-modello.
  • Introdurre i servizi che hanno senso esistere solo dopo il completamento della struttura ad albero visuale dai modelli.
  • Collegare gestori eventi definiti dalla classe a parti del modello o l'elemento padre del controllo di un controllo composito. Ad esempio, è possibile che la logica della classe gestisca gli eventi KeyDown indirizzati da una parte del modello TextBox di un controllo composito. A tale scopo, gli stati dell'interfaccia utente vengono aggiornati in base all'evento di input di basso livello della parte e ad altri eventi specifici del controllo e generati dall'elemento padre del controllo.
  • Impostare gli stati e le proprietà degli elementi all'interno del modello che dipendono da altri fattori. Ad esempio, i valori delle proprietà potrebbero essere individuabili solo conoscendo l'elemento padre o quando una classe derivata specifica usa un modello comune. Si noti tuttavia che un controllo ben progettato deve gestire i relativi stati di visualizzazione con VisualStateManager. Per altre info su questo concetto, vedi Guida introduttiva: Modelli di controllo.

OnApplyTemplate è spesso un punto più appropriato per gestire le modifiche apportate alla struttura ad albero visuale creata dal modello rispetto all'evento Loaded . L'evento Loaded può verificarsi prima dell'applicazione del modello e la struttura ad albero visuale potrebbe essere incompleta a partire da Loaded.

Si applica a

Vedi anche