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>
- 繼承
- 屬性
範例
下列範例會為 Button 建立簡單的 ControlTemplate。 控制樣本包含一個 Grid ,並指定此行為:
<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 屬性的值使用,它會套用範本來定義控件的視覺效果。 您幾乎一律使用與使用 Setter 設定 Control.Template 的 Style 相同的隱含索引鍵 TargetType,將 ControlTemplate 定義為 XAML 資源。 您很少會直接在控件實例上指派 Control.Template 的值。
定義 ControlTemplate 時,實際上只會使用兩個屬性: TargetType 和隱含 XAML 內容。 ControlTemplate 會從其 FrameworkTemplate 父系繼承隱含的 XAML 內容行為。 基本上,在 XAML 中所定義的 ControlTemplate 內所包含的元素會為定義範本之 XAML 元素的進一步結構指派根元素。 這是設定「範本」屬性,該屬性之後無法由程式代碼檢查,而且只有 XAML 剖析器如何根據套用該範本來指派控件的內容。
若要從 ControlTemplate 設定其內容,控件元素必須是真正的 Control 子類別,使其具有 Control.Template 屬性。 在某些情況下,範本會套用內容,但這通常牽涉到 DataTemplate 或 ItemsPanelTemplate () 的其中一個其他 FrameworkTemplate 衍生範本類別。
控件範本提供組成控件實例的視覺效果和元件,因為它出現在應用程式的 UI 中。 在運行時間,範本已經套用,因此從範本建立的所有元件現在都是控件的一部分,而且可以透過檢查控件內容中的 XAML 命名範圍或使用 VisualTreeHelper 類別等技術來存取。 輸入事件之類的事件有時會公開來自套用控件範本的控件部分。
有方法可以在範本套用至特定控件實例之前或之後存取範本定義的內容;請參閱 OnApplyTemplate 或 GetTemplateChild。
可以偵測到 ControlTemplate 套用至控件實例的實際時間點,因為這會叫用 OnApplyTemplate 受保護的虛擬方法。 只要控件未密封,您就可以將控件子類別化,讓您有機會覆寫 OnApplyTemplate。 您可以撰寫此覆寫來執行套用範本之前無法執行的動作。 例如,您可以連接事件處理程式來控制元件,或設定控件屬性來參考從範本建立但不是以 {TemplateBinding} 標記延伸 值開頭的物件元件。
建構函式
ControlTemplate() |
初始化 ControlTemplate 類別的新實例。 |
屬性
Dispatcher |
一律會在 Windows 應用程式 SDK 應用程式中傳 |
DispatcherQueue |
|
TargetType |
取得或設定 套用 ControlTemplate 的型別。 |
方法
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) |