FrameworkElement.OnApplyTemplate 方法

定義

每當應用程式程式碼或內部進程 (例如重建版面配置傳遞) 呼叫 ApplyTemplate時叫用。 簡單來說,這表示方法會在應用程式中顯示 UI 元素之前呼叫。 覆寫這個方法,以影響類別的預設後置範本邏輯。

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);
}
Protected Overloads Sub OnApplyTemplate()
    UpButtonElement = TryCast(GetTemplateChild("UpButton"), RepeatButton)
    DownButtonElement = TryCast(GetTemplateChild("DownButton"), RepeatButton)
    TextElement = TryCast(GetTemplateChild("TextBlock"), TextBlock)

    UpdateStates(False)
End Sub

備註

雖然 OnApplyTemplate 是由 FrameworkElement 類別所定義的方法,但 OnApplyTemplate 行為和覆寫 OnApplyTemplate 的案例主要與 Control 子類別有關。 這是因為您通常會在 XAML 檔案中定義的Template屬性,以及適用于控制項之範本的內部Windows 執行階段邏輯。 ContentPresenterContentControl也有特製化範本行為。

實作者的注意事項

這個方法的基底實作會實作為Windows 執行階段內部行為,以提供一些基本的版面配置邏輯。 您應該一律從實作呼叫基底實作。 無法參考基底實作可能會導致不想要的配置行為。

衍生類別可以使用此方法作為下列案例的通知或進入點:

  • 使用自訂程式碼建置視覺化樹狀結構的其餘部分。
  • 執行只能在套用範本中 XAML 定義視覺化樹狀結構之後運作的程式碼。 例如,藉由呼叫 GetTemplateChild來取得來自範本之具名元素參考的程式碼,以便其他範本後執行時間程式碼可以參考這些元件的成員。
  • 介紹只有在範本中的視覺化樹狀結構完成之後,才有意義的服務。
  • 將類別定義的事件處理常式附加至範本的元件,或複合控制項的控制項父代。 例如,您可能想要類別邏輯從複合控制項的TextBox範本部分處理路由的 KeyDown事件。 您可以這麼做,以便根據元件的低階輸入事件更新 UI 狀態,並改為引發控制項父代所引發的其他特定事件。
  • 設定相依于其他因素之範本內元素的狀態和屬性。 例如,只有在知道父元素,或特定衍生類別使用通用範本時,才能探索屬性值。 不過,請注意,設計良好的控制項應該使用 VisualStateManager處理其視覺狀態。 如需此概念的詳細資訊,請參閱 快速入門:控制項範本

OnApplyTemplate 通常比 Loaded 事件更適合處理範本建立視覺化樹狀結構的調整。 在套用範本之前,可能會發生 Loaded 事件,而且視覺化樹狀結構可能未完成,因為 已載入

適用於

另請參閱