Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ControlTemplate

 

Publicado: octubre de 2016

Especifica la estructura visual y los aspectos de comportamiento de un Control que se pueden compartir entre varias instancias del control.

Espacio de nombres:   System.Windows.Controls
Ensamblado:  PresentationFramework (en PresentationFramework.dll)

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.FrameworkTemplate
      System.Windows.Controls.ControlTemplate

[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
[DictionaryKeyPropertyAttribute("TargetType")]
public class ControlTemplate : FrameworkTemplate

NombreDescripción
System_CAPS_pubmethodControlTemplate()

Inicializa una nueva instancia de la clase ControlTemplate.

System_CAPS_pubmethodControlTemplate(Type)

Inicializa una nueva instancia de la ControlTemplate clase con el tipo de destino especificado.

NombreDescripción
System_CAPS_pubpropertyDispatcher

Obtiene el Dispatcher Esto DispatcherObject está asociado.(Heredado de DispatcherObject).

System_CAPS_pubpropertyHasContent

Obtiene un valor que indica si esta plantilla tiene contenido optimizado.(Heredado de FrameworkTemplate).

System_CAPS_pubpropertyIsSealed

Obtiene un valor que indica si este objeto está en un estado inmutable, por lo que no se puede cambiar.(Heredado de FrameworkTemplate).

System_CAPS_pubpropertyResources

Obtiene o establece la colección de recursos que pueden utilizarse dentro del ámbito de esta plantilla.(Heredado de FrameworkTemplate).

System_CAPS_pubpropertyTargetType

Obtiene o establece el tipo para el que este ControlTemplate está pensado.

System_CAPS_pubpropertyTemplate

Obtiene o establece una referencia al objeto que graba o reproduce los nodos XAML de la plantilla cuando la plantilla define o aplica un sistema de escritura.(Heredado de FrameworkTemplate).

System_CAPS_pubpropertyTriggers

Obtiene una colección de TriggerBase objetos que aplican cambios de propiedad o realizan acciones basadas en condiciones especifican.

System_CAPS_pubpropertyVisualTree

Obtiene o establece el nodo raíz de la plantilla.(Heredado de FrameworkTemplate).

NombreDescripción
System_CAPS_pubmethodCheckAccess()

Determina si el subproceso de llamada tiene acceso a este DispatcherObject.(Heredado de DispatcherObject).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodFindName(String, FrameworkElement)

Busca el elemento asociado con el nombre especificado que se definió en esta plantilla.(Heredado de FrameworkTemplate).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodLoadContent()

Carga el contenido de la plantilla como una instancia de un objeto y devuelve el elemento raíz del contenido.(Heredado de FrameworkTemplate).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodRegisterName(String, Object)

Registra un nuevo par de nombre y objeto en el ámbito de nombres actual.(Heredado de FrameworkTemplate).

System_CAPS_pubmethodSeal()

Bloquea la plantilla, por lo que no se puede cambiar.(Heredado de FrameworkTemplate).

System_CAPS_pubmethodShouldSerializeResources(XamlDesignerSerializationManager)

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la Resources propiedad en las instancias de esta clase.(Heredado de FrameworkTemplate).

System_CAPS_pubmethodShouldSerializeVisualTree()

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la VisualTree propiedad en las instancias de esta clase.(Heredado de FrameworkTemplate).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

System_CAPS_pubmethodUnregisterName(String)

Quita una asignación de nombre y objeto del ámbito de nombres XAML.(Heredado de FrameworkTemplate).

System_CAPS_protmethodValidateTemplatedParent(FrameworkElement)

Comprueba al elemento primario con plantilla con un conjunto de reglas.(Invalida FrameworkTemplate.ValidateTemplatedParent(FrameworkElement)).

System_CAPS_pubmethodVerifyAccess()

Exige que el subproceso que realiza la llamada tiene acceso a este DispatcherObject.(Heredado de DispatcherObject).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethodINameScope.FindName(String)

Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. Devuelve un objeto que tiene el nombre de identificación proporcionado.(Heredado de FrameworkTemplate).

System_CAPS_pubinterfaceSystem_CAPS_privmethodIQueryAmbient.IsAmbientPropertyAvailable(String)

Consulta si una propiedad de ambiente especificada está disponible en el ámbito actual.(Heredado de FrameworkTemplate).

El ControlTemplate permite especificar la estructura visual de un control. El autor del control puede definir el valor predeterminado ControlTemplate y autor de la aplicación puede invalidar el ControlTemplate para reconstruir la estructura visual del control.

Plantillas de control es una de las muchas características que ofrece el WPF modelo de estilos y plantillas. El modelo de estilos y plantillas proporciona una flexibilidad tan amplia que en muchos casos no es necesario escribir sus propios controles. Si es el autor de una aplicación que desea cambiar la visualización del control o reemplazar la ControlTemplate de un control existente, consulte el estilos y plantillas tema para ver ejemplos y una explicación más detallada.

Si está escribiendo su propio control, vea "Crear un Control personalizado" en el Control Authoring Overview.

Un ControlTemplate está pensado para ser una unidad autónoma de detalle de implementación que es invisible para los usuarios y objetos, incluidos los estilos externos. Es la única manera de manipular el contenido de la plantilla de control desde dentro de la misma plantilla de control.

<ControlTemplate>
  <VisualTreeRootNode>VisualTreeNodeContents
  </VisualTreeRootNode>
</ControlTemplate>

ControlTemplate

Elemento de objeto para ControlTemplate o una clase derivada.

VisualTreeRootNode

Una sola XAML elemento como secundario inmediato de la ControlTemplate (o una clase derivada). Plantillas deben tener un único nodo raíz. Para generar una plantilla útil, el elemento elegido como VisualTreeRootNode debe admitir un modelo de contenido propio, a menudo un modelo que admite varios elementos secundarios.

VisualTreeNodeContents

Uno o varios elementos que completan la plantilla. Si el elemento elegido como VisualTreeRootNode sólo admite un único elemento secundario, a continuación, existe solo pueden declararse un elemento como VisualTreeNodeContents. También es posible (aunque poco frecuente) proporcionar contenido de texto si el elegido VisualTreeRootNode admite una propiedad de contenido de texto.

La siguiente muestra un Button Style que establece el ControlTemplate de un 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>

Una vez aplicado, el Button aparece como una Ellipse:

Ejemplo de ControlTemplate de Button

Al establecer el Template propiedad de un Control a un nuevo ControlTemplate como en el ejemplo anterior, está reemplazando toda la plantilla. ¿Qué la Button aspecto cuando tiene el foco o presiona forma parte de la apariencia predeterminada del botón que se va a reemplazar. Por lo tanto, según sus necesidades, puede poner la definición de qué botón debe ser similar a cuando se presiona y así sucesivamente, como en el ejemplo siguiente:

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

Tenga en cuenta que este ejemplo hace referencia a recursos que no se muestran aquí. Para obtener un ejemplo completo, vea Styling with ControlTemplates Sample. Este ejemplo proporciona ejemplos de plantillas de control para numerosos controles y es la mejor manera de comenzar con la creación de plantillas de control.

.NET Framework
Disponible desde 3.0
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: