展开 最小化

Control.Template Property

获取或设置控件模板。控件模板用于定义控件在 UI 中的视觉外观,并在 XAML 标记中进行定义。

语法


Public Property Template As ControlTemplate
   Get
   Set


<control Template="{StaticResource templateResourceKey}"/>


<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

XAML Values

templateResourceKey

标识所请求模板的键。该键引用 ResourceDictionary 中的现有资源。

注意  使用属性元素语法定义内联模板在技术上是可行的,但建议对于大多数模板方案不要这样做。

controlTypeName

控件 Type 的字符串形式。

templateRoot

定义模板的根元素的单个对象元素(必须是 FrameworkElement 派生的)。有关可用作模板根的项的更多信息,请参见快速入门:控件模板

属性值

类型: ControlTemplate

定义 Control 的外观的模板。ControlTemplate 只能将一个根元素作为其内容。

备注

上面所示的第二个 XAML 语法是 Setter 语法,是 Style 的一部分。这是在几乎所有情况下定义 Template 值(针对 Control)的方式。

TargetType 是所有 ControlTemplate 元素的必需特性,作为 Template 值使用。如果你正在使用 style-setter 语法,该值应符合 TargetType 属性(属于 Style,后者包含 Setter 以用于 Template)。

ControlTemplate 指定 Control 的外观;如果 Control 没有 ControlTemplate,则 Control 在应用程序中将没有可见外观。控件作者定义默认的控件模板,而应用程序作者可重新模板化 ControlTemplate XAML,以重新定义此控件的可视化树。

通常在作为特定于控件的隐式样式的一部分的可扩展应用程序标记语言 (XAML) 中设置 Control 模板。在这种情况下,Property 值在 Setter 中设置为字符串"模板",且 Setter.Value 值被设置为包含 ControlTemplate 对象元素的属性元素。例如,这是 Style,用以定义一个 Template 值(为 ScrollViewer)。这是隐式样式的示例,其中 Style 可以为 ResourceDictionary,但不需要 x:Key 特性



<ResourceDictionary>
  <Style TargetType="ScrollViewer">
  ...
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ScrollViewer">
          <!--visual root of template for a ScrollViewer-->
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
  ...
</ResourceDictionary>

样式和模板

你可以使用 Setter(在 Style 中),以将值应用于任何依赖项属性。但是,它是 Setter(对于 Template 属性,该属性属于 Control 派生类,该类在典型的 Style 中组合大多数 XAML 标记)。当 Style 用于定义控件模板时,TargetType(属于 Style 元素)和 TargetType(属于 ControlTemplate 元素)(用于其 Control.Template setter)应始终使用相同的值。Template setter 为应用该模板的控件定义基本的模板化 UI 定义它还包含控件的可视状态,以及其他基于状态的 UI 定义(例如默认主题转换)。对于复杂控件(如 ListBox),默认值模板 StyleControlTemplate 可能有成百上千个 XAML 行。有关 Template 在控件模板化方案中所起作用的更多信息,请参见快速入门:控件模板

隐式样式

你可以定义样式,这样 Style 将由同一 TargetType 的所有对象隐式使用,而无需此类对象的每个实例专门引用 Style 作为 FrameworkElement.Style 值。如果 <Style> 资源在 ResourceDictionary 中声明时,未使用 x:Key 特性x:Key 值将使用 TargetType 属性的值。如果隐式设置该样式,该样式将只应用于精确匹配 TargetType 的类型,而不应用于派生自 TargetType 值的元素。例如,如果为应用程序中的所有 ToggleButton 控件隐式创建样式,且应用程序具有 ToggleButtonCheckBox 控件(CheckBox 派生自 ToggleButton),则 "ToggleButton" 隐式样式将仅应用于 ToggleButton 控件。

示例

此示例显示了一个更完整的控件模板,该模板已定义为 StyleSetter,其 Setter.Property 值为 "Template"。这是 RadioButton 控件的指定样式。它包括通一个函数控件模板一部分的模板元素,如 VisualStateManager.VisualStateGroups 附加属性元素(附加到模板的根元素)和为每个突出控件部件分配的 x:Name 特性值。



    <Style x:Key="TextRadioButtonStyle" TargetType="RadioButton"> 
        <Setter Property="MinWidth" Value="0"/> 
        <Setter Property="MinHeight" Value="0"/> 
        <Setter Property="Template"> 
            <Setter.Value> 
                <ControlTemplate TargetType="RadioButton"> 
                    <Grid Background="Transparent"> 
                        <TextBlock 
                            x:Name="Text" 
                            Text="{TemplateBinding Content}" 
                            Margin="3,-7,3,10" 
                            TextWrapping="NoWrap" 
                            Style="{StaticResource SubheaderTextStyle}"/> 
                        <Rectangle 
                            x:Name="FocusVisualWhite" 
                            IsHitTestVisible="False" 
                            Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" 
                            StrokeEndLineCap="Square" 
                            StrokeDashArray="1,1" 
                            Opacity="0" 
                            StrokeDashOffset="1.5"/> 
                        <Rectangle 
                            x:Name="FocusVisualBlack" 
                            IsHitTestVisible="False" 
                            Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" 
                            StrokeEndLineCap="Square" 
                            StrokeDashArray="1,1" 
                            Opacity="0" 
                            StrokeDashOffset="0.5"/> 
 
                        <VisualStateManager.VisualStateGroups> 
                            <VisualStateGroup x:Name="CommonStates"> 
                                <VisualState x:Name="Normal"/> 
                                <VisualState x:Name="PointerOver"> 
                                    <Storyboard> 
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> 
                                        </ObjectAnimationUsingKeyFrames> 
                                    </Storyboard> 
                                </VisualState> 
                                <VisualState x:Name="Pressed"> 

                                    <Storyboard> 
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> 
                                        </ObjectAnimationUsingKeyFrames> 
                                    </Storyboard> 
                                </VisualState> 
                                <VisualState x:Name="Disabled"> 
                                    <Storyboard> 
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ButtonDisabledForegroundThemeBrush}"/> 
                                        </ObjectAnimationUsingKeyFrames> 
                                    </Storyboard> 
                                </VisualState> 
                            </VisualStateGroup> 
                            <VisualStateGroup x:Name="FocusStates"> 
                                <VisualState x:Name="Focused"> 
                                    <Storyboard> 
                                        <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> 
                                        <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> 
                                    </Storyboard> 
                                </VisualState> 
                                <VisualState x:Name="Unfocused"/> 
                            </VisualStateGroup> 
                            <VisualStateGroup x:Name="CheckStates"> 
                                <VisualState x:Name="Checked"/> 
                                <VisualState x:Name="Unchecked"> 
                                    <Storyboard> 
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> 
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> 
                                        </ObjectAnimationUsingKeyFrames> 
                                    </Storyboard> 
                                </VisualState> 
                                <VisualState x:Name="Indeterminate"/> 
                            </VisualStateGroup> 
                        </VisualStateManager.VisualStateGroups> 
                    </Grid> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 


要求

最低支持客户端

Windows 8

最低支持服务器

Windows Server 2012

命名空间

Windows.UI.Xaml.Controls
Windows::UI::Xaml::Controls [C++]

元数据

Windows.winmd

另请参见

快速入门:控件模板
Control
OnApplyTemplate
GetTemplateChild
ControlTemplate
Style

 

 

显示:
© 2014 Microsoft