ControlTemplate 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
定義專案樹狀結構,做為控制項的控制項範本。
public ref class ControlTemplate sealed : FrameworkTemplate
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class ControlTemplate final : FrameworkTemplate
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ControlTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class ControlTemplate : FrameworkTemplate
Public NotInheritable Class ControlTemplate
Inherits FrameworkTemplate
<ControlTemplate ...>
templateRootElement
</ControlTemplate>
- 繼承
- 屬性
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
範例
下列範例會為 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 屬性。 在某些情況下,範本會套用內容,但這通常牽涉到其中一個其他 FrameworkTemplate 衍生範本類別, (DataTemplate 或 ItemsPanelTemplate) 。
控制項範本提供組成控制項實例的視覺效果和元件,因為它出現在應用程式的 UI 中。 在執行時間,範本已經套用,因此從範本建立的所有元件現在都是控制項的一部分,而且可以透過檢查控制項內容中的 XAML 名稱範圍或使用 VisualTreeHelper 類別等技術來存取。 輸入事件之類的事件有時會公開來自套用控制項範本的控制項部分。
在範本套用至特定控制項實例之前或之後,有一些方法可以存取範本定義的內容;請參閱 OnApplyTemplate 或 GetTemplateChild。
可以偵測到 ControlTemplate 套用至控制項實例的實際時間點,因為這會叫用 OnApplyTemplate 受保護的虛擬方法。 只要控制項未密封,您就可以將控制項子類別化,讓您有機會覆寫 OnApplyTemplate。 您可以寫入此覆寫,以執行套用範本之前無法執行的動作。 例如,您可以連接事件處理常式來控制元件,或設定控制項屬性來參考從範本建立但不是以 {TemplateBinding} 標記延伸 值開頭的物件元件。
建構函式
ControlTemplate() |
初始化 ControlTemplate 類別的新實例。 |
屬性
Dispatcher |
取得與此物件相關聯的 CoreDispatcher 。 CoreDispatcher代表可以存取 UI 執行緒上DependencyObject的功能,即使程式碼是由非 UI 執行緒起始也一樣。 (繼承來源 DependencyObject) |
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) |