共用方式為


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);
}

備註

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

實作者的注意事項

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

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

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

OnApplyTemplate 通常是處理範本建立視覺化樹狀結構調整比 Loaded 事件更適當的點。 在套用範本之前,可能會發生 Loaded 事件,而視覺化樹狀結構在 已載入時可能不完整。

適用於

另請參閱