ControlTemplate 類別

定義

定義專案樹狀結構,做為控制項的控制項範本。

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>
繼承
Object Platform::Object IInspectable DependencyObject FrameworkTemplate ControlTemplate
屬性

Windows 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)

範例

下列範例會為 Button建立簡單的 ControlTemplate。 控制項範本包含一個 Grid ,並指定此行為:

  • 當使用者將滑鼠放在 Button上方時, Grid 會從綠色變更為紅色,超過一半秒。
  • 當使用者將滑鼠從按鈕移開時, 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.TemplateStyle相同的隱含索引鍵TargetType,將 ControlTemplate 定義為 XAML 資源。 您很少會直接在控制項實例上為 Control.Template 指派值。

定義 ControlTemplate 時,實際上只會使用兩個屬性: TargetType和隱含的 XAML 內容。 ControlTemplate 會從其 FrameworkTemplate 父代繼承隱含的 XAML 內容行為。 基本上,在 XAML 中所定義的 ControlTemplate 內所包含的元素,就是為定義範本之 XAML 元素的進一步結構指派根項目。 這是設定「範本」屬性,該屬性之後無法由程式碼檢查,而且只有 XAML 剖析器如何根據套用該範本來指派控制項的內容。

若要從 ControlTemplate 設定其內容,控制項元素必須是真正的 Control 子類別,使其具有 Control.Template 屬性。 在某些情況下,範本會套用內容,但這通常牽涉到其中一個其他 FrameworkTemplate 衍生範本類別, (DataTemplateItemsPanelTemplate) 。

控制項範本提供組成控制項實例的視覺效果和元件,因為它出現在應用程式的 UI 中。 在執行時間,範本已經套用,因此從範本建立的所有元件現在都是控制項的一部分,而且可以透過檢查控制項內容中的 XAML 名稱範圍或使用 VisualTreeHelper 類別等技術來存取。 輸入事件之類的事件有時會公開來自套用控制項範本的控制項部分。

在範本套用至特定控制項實例之前或之後,有一些方法可以存取範本定義的內容;請參閱 OnApplyTemplateGetTemplateChild

可以偵測到 ControlTemplate 套用至控制項實例的實際時間點,因為這會叫用 OnApplyTemplate 受保護的虛擬方法。 只要控制項未密封,您就可以將控制項子類別化,讓您有機會覆寫 OnApplyTemplate。 您可以寫入此覆寫,以執行套用範本之前無法執行的動作。 例如,您可以連接事件處理常式來控制元件,或設定控制項屬性來參考從範本建立但不是以 {TemplateBinding} 標記延伸 值開頭的物件元件。

建構函式

ControlTemplate()

初始化 ControlTemplate 類別的新實例。

屬性

Dispatcher

取得與此物件相關聯的 CoreDispatcherCoreDispatcher代表可以存取 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)

適用於

另請參閱