ControlTemplate 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定 Control 的視覺化結構和行為層面,其可透過控制項的多重執行個體 (Instance) 來共用。
public ref class ControlTemplate : System::Windows::FrameworkTemplate
[System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)]
[System.Windows.Markup.DictionaryKeyProperty("TargetType")]
public class ControlTemplate : System.Windows.FrameworkTemplate
[<System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type ControlTemplate = class
inherit FrameworkTemplate
Public Class ControlTemplate
Inherits FrameworkTemplate
- 繼承
- 屬性
範例
下列顯示 , Button Style 其會設定 ControlTemplate 的 Button :
<Style TargetType="Button">
<!--Set to true to not get any properties from the themes.-->
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
當您將 的 Control 屬性設定 Template 為新的 ControlTemplate 時,如上述範例所示,您會取代整個範本。 Button當焦點處於焦點或按下時,看起來像是您要取代之按鈕預設面板的一部分。 因此,視您的需求而定,您可能會想要將按鈕在按下時看起來的樣子放入定義中,如下列範例所示:
<Style TargetType="Button">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="FocusVisualStyle"
Value="{StaticResource ButtonFocusVisual}" />
<Setter Property="MinHeight"
Value="23" />
<Setter Property="MinWidth"
Value="75" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border TextBlock.Foreground="{TemplateBinding Foreground}"
x:Name="Border"
CornerRadius="2"
BorderThickness="1">
<Border.BorderBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource BorderLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource BorderDarkColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1"
StartPoint="0.5,0">
<GradientStop Color="{DynamicResource ControlLightColor}"
Offset="0" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1" />
</LinearGradientBrush>
</Border.Background>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5" />
<VisualTransition GeneratedDuration="0"
To="Pressed" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlMouseOverColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[0].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource PressedBorderDarkColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource PressedBorderLightColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledControlDarkColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledForegroundColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[1].(GradientStop.Color)"
Storyboard.TargetName="Border">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource DisabledBorderDarkColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter Margin="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefault"
Value="true">
<Setter TargetName="Border"
Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource DefaultBorderBrushLightBrush}"
Offset="0.0" />
<GradientStop Color="{DynamicResource DefaultBorderBrushDarkColor}"
Offset="1.0" />
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
請注意,此範例會參考此處未顯示的資源。 如需完整的範例,請參閱使用 ControlTemplate 設定樣式範例。 該範例提供許多控制項的控制項範本範例,是開始建立控制項範本的最佳方式。
備註
ControlTemplate可讓您指定控制項的視覺結構。 控制項作者可以定義預設值 ControlTemplate ,而應用程式作者可以覆寫 ControlTemplate 來重新建構控制項的視覺結構。
控制項範本化是 WPF 樣式和範本化模型所提供的許多功能之一。 樣式和範本化模型提供您這種絕佳的彈性,在許多情況下,您不需要撰寫自己的控制項。 如果您是想要變更控制項視覺效果或取代 ControlTemplate 現有控制項的應用程式作者,請參閱 樣式和範本 化主題,以取得範例和深入討論。
如果您要撰寫自己的控制項,請參閱 控制項撰寫概觀中的。
ControlTemplate是一個獨立的實作詳細資料單位,在使用者和物件外部看不到,包括樣式。 操作控制項範本內容的唯一方式是在相同的控制項範本內。
XAML 屬性項目用法
<ControlTemplate>
<VisualTreeRootNode>
VisualTreeNodeContents
</VisualTreeRootNode>
</ControlTemplate>
XAML 值
ControlTemplate
或衍生類別的物件 ControlTemplate 專案。
VisualTreeRootNode
單一 XAML 元素,作為 (或衍生類別的 ControlTemplate 立即子系,) 。 範本必須有單一根節點。 為了產生有用的範本,選擇為 VisualTreeRootNode 的專案應該支援本身的內容模型,通常是支援多個子項目的模型。
VisualTreeNodeContents
完成預定範本的一或多個元素。 如果選擇為 VisualTreeRootNode 的專案只支援單一子系,則只有一個專案宣告為 VisualTreeNodeContents。 如果所選 的 VisualTreeRootNode 支援文字內容屬性,也可能 () 提供文字內容。
建構函式
ControlTemplate() |
初始化 ControlTemplate 類別的新執行個體。 |
ControlTemplate(Type) |
使用指定的目標型別來初始化 ControlTemplate 類別的新執行個體。 |
屬性
Dispatcher |
取得與這個 Dispatcher 關聯的 DispatcherObject。 (繼承來源 DispatcherObject) |
HasContent |
取得值,指出這個樣板是否有最佳化內容。 (繼承來源 FrameworkTemplate) |
IsSealed |
取得值,這個值表示這個物件是否處於不變的狀態,以便無法對其進行變更。 (繼承來源 FrameworkTemplate) |
Resources |
取得或設定可在這個樣板的範圍內使用的資源集合。 (繼承來源 FrameworkTemplate) |
TargetType |
為預期為 ControlTemplate 的項目取得或設定類型。 |
Template |
當樣板為已定義或由寫入器套用時,取得或設定記錄或播放該樣板之 XAML 節點的物件之參考。 (繼承來源 FrameworkTemplate) |
Triggers |
取得 TriggerBase 物件的集合,其會根據指定的條件套用屬性變更,或執行動作。 |
VisualTree |
取得或設定樣板的根節點。 (繼承來源 FrameworkTemplate) |
方法
明確介面實作
INameScope.FindName(String) |
傳回具有所提供之識別名稱的物件。 (繼承來源 FrameworkTemplate) |
IQueryAmbient.IsAmbientPropertyAvailable(String) |
查詢指定的環境屬性 (Ambient Property) 是否可用於目前的範圍。 (繼承來源 FrameworkTemplate) |