Control.Template Propiedad

Definición

Obtiene o establece una plantilla de control. La plantilla de control define la apariencia visual de un control en la interfaz de usuario y se define en el marcado XAML.

public:
 property ControlTemplate ^ Template { ControlTemplate ^ get(); void set(ControlTemplate ^ value); };
ControlTemplate Template();

void Template(ControlTemplate value);
public ControlTemplate Template { get; set; }
var controlTemplate = control.template;
control.template = controlTemplate;
Public Property Template As ControlTemplate
<control Template="{StaticResource templateResourceKey}"/>
- or -
<Style TargetType="controlTypeName">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="controlTypeName">
        templateRoot
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Valor de propiedad

Plantilla que define la apariencia del control. ControlTemplate debe tener exactamente un elemento raíz como su contenido.

Ejemplos

En este ejemplo se muestra una plantilla de control más completa definida como style ysetter con el valor Setter.Property de "Template". Se trata de un estilo con nombre para un control RadioButton . Incluye los elementos de plantilla que normalmente forman parte de una plantilla de control funcional, como un elemento de propiedad adjunta VisualStateManager.VisualStateGroups adjunto al elemento raíz de la plantilla y los valores de atributo x:Name asignados a cada una de las partes de control destacadas.

<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> 

Comentarios

La segunda sintaxis XAML mostrada anteriormente es una sintaxis setter como parte de un style. Así es como se define un valor de plantilla para un control en casi todos los casos.

TargetType es un atributo obligatorio en todos los elementos ControlTemplate usados como un valor template. El valor debe coincidir con la propiedad TargetType para el estilo que contiene el establecedor de plantilla, si usa una sintaxis de establecedor de estilo.

ControlTemplate especifica la apariencia de un control; Si un control no tiene controlTemplate, el control no tendrá presencia visible en la aplicación. El autor del control define la plantilla de control predeterminada y el autor de la aplicación puede volver a crear la plantilla XAML ControlTemplate para volver a definir el árbol visual del control.

Normalmente , las plantillas de control se establecen en Lenguaje de marcado de aplicación extensible (XAML) como parte de un estilo implícito específico del control. En este caso, se establece un valor Property en setter como la cadena "Template" y el valor Setter.Value se establece como un elemento de propiedad, que contiene un elemento de objeto ControlTemplate . Por ejemplo, este es el estilo que define un valor de plantilla para un ScrollViewer. Este es un ejemplo de un estilo implícito, donde style puede estar en un resourceDictionary , pero no necesita un atributo 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>

Estilos y plantillas

Puede usar un establecedor en un estilo para aplicar valores a cualquier propiedad de dependencia. Pero es el Establecedor de la propiedad Template de una clase derivada de Control que constituye la mayoría del marcado XAML en un estilo típico. Cuando se usa un Style para definir una plantilla de control, el TargetType del elemento Style y el TargetType del elemento ControlTemplate para su establecedor Control.Template siempre deben usar el mismo valor. El establecedor de plantillas define la definición de interfaz de usuario con plantilla básica para un control donde se aplica esa plantilla. También contiene los estados visuales de un control y otras definiciones de interfaz de usuario basadas en estado, como transiciones de tema predeterminadas. Para un control complejo, como ListBox, el estilo de plantilla predeterminado y la propiedad ControlTemplate dentro pueden tener cientos de líneas de XAML. Para obtener más información sobre el rol de Plantilla en escenarios de plantillas de control, consulte Inicio rápido: Plantillas de control.

Estilos implícitos

Puede definir estilos de forma que todos los objetos del mismo TargetType usen implícitamente un estilo, sin necesidad de que cada instancia de este objeto haga referencia específicamente al valor Style como frameworkElement.Style. Cuando un <Style> recurso se declara en un ResourceDictionary sin un atributo x:Key, el valor x:Key usa el valor de la propiedad TargetType . Si establece implícitamente el estilo, el estilo solo se aplica a los tipos que coinciden exactamente con TargetType y no a los elementos derivados del valor TargetType . Por ejemplo, si crea un estilo implícitamente para todos los controles ToggleButton de la aplicación, y la aplicación tiene controles ToggleButton y CheckBox (CheckBox deriva de ToggleButton), el estilo implícito "ToggleButton" solo se aplica a los controles ToggleButton .

Se aplica a

Consulte también