ControlTemplate 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
定義做為控件控件範本的專案樹狀結構。
public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
templateRootElement
</ControlTemplate>
- 繼承
- 屬性
範例
以下範例為按鈕建立一個簡單的 ControlTemplate。 控制範本包含一個 格子 ,並指定以下行為:
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
Pointer is over the button.-->
<VisualState x:Name="PointerOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
你可以在 generic.xaml 檔案中看到每個 XAML 控制項的完整範本。 此檔案位於(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP<SDK version>\Generic 資料夾中。
備註
欲了解更多資訊與範例,請參閱 XAML 控制範本。
ControlTemplate 作為 Control.Template 屬性的值,該屬性透過套用範本來定義控制項的視覺化。 你幾乎總是將 ControlTemplate 定義為 XAML 資源,使用隱含的鍵 TargetType,這與設定 Control.Template 的 Style(用 Setter 設定)相同。 你幾乎不會直接在控制實例上為 Control.Template 指派值。
定義 ControlTemplate 時,實際上只有兩個屬性: TargetType 和隱含的 XAML 內容。 ControlTemplate 繼承了其 FrameworkTemplate 父程式隱含的 XAML 內容行為。 基本上,XAML 定義中 ControlTemplate 所包含的元素,是為定義該範本的 XAML 元素結構指派根元素。 這是設定一個「範本」屬性,程式碼無法檢查,且僅用於 XAML 解析器根據套用該範本指派控制項內容。
要讓其內容從 ControlTemplate 設定,控制元素必須是真正的 Control 子類別,因此具有 Control.Template 屬性。 當然也有其他範本會套用內容的情況,但這通常涉及其他 FrameworkTemplate 衍生的範本類別(DataTemplate 或 ItemsPanelTemplate)。
控制範本提供視覺化和組成控制實例的部分,呈現在應用程式介面中。 執行時,範本已經套用完成,因此所有由範本建立的部分現在都成為控制項的一部分,可以透過從控制內容中檢視 XAML 命名範圍或使用 VisualTreeHelper 類別等技術存取。 像輸入事件這類事件有時會暴露來自套用控制模板的控制部分。
有方法可以在模板套用到特定控制實例之前或之後存取模板定義的內容;請參見 OnApplyTemplate 或 GetTemplateChild。
控制模板實際套用到控制實例的時間點可以被偵測,因為這會呼叫 OnApplyTemplate 保護的虛擬方法。 只要控制項沒有被封印,你可以把控制項子職,這樣你就有機會覆寫 OnApplyTemplate。 此覆寫可寫成執行模板套用前無法執行的動作。 例如,你可以將事件處理器連接到控制元件,或設定控制屬性參考那些從範本建立但沒有以 {TemplateBinding} 標記擴充值 開始的物件元件。
建構函式
| 名稱 | Description |
|---|---|
| ControlTemplate() |
初始化 ControlTemplate 類別的新實例。 |
屬性
| 名稱 | Description |
|---|---|
| Dispatcher |
它總是在 Windows 應用程式 SDK 應用程式中回傳 |
| DispatcherQueue |
得到 |
| TargetType |
取得或設定 ControlTemplate 所應用的類型。 |
方法
| 名稱 | Description |
|---|---|
| ClearValue(DependencyProperty) |
清除依賴性財產的局部價值。 (繼承來源 DependencyObject) |
| GetAnimationBaseValue(DependencyProperty) |
回傳任何為相依屬性建立的基礎值,適用於動畫未啟用時。 (繼承來源 DependencyObject) |
| GetValue(DependencyProperty) |
回傳 DependencyObject 中相依屬性的當前有效值。 (繼承來源 DependencyObject) |
| ReadLocalValue(DependencyProperty) |
若設定了本地值,則回傳依賴性質的局部值。 (繼承來源 DependencyObject) |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
註冊一個通知函式,用於監聽此 DependencyObject 實例中特定 DependencyProperty 的變更。 (繼承來源 DependencyObject) |
| SetValue(DependencyProperty, Object) |
將相依屬性的局部值設定在 DependencyObject 上。 (繼承來源 DependencyObject) |
| UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
取消先前透過呼叫 RegisterPropertyChangedCallback 註冊的變更通知。 (繼承來源 DependencyObject) |