Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

ControlTemplate (Clase)

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

Espacio de nombres:  System.Windows.Controls
Ensamblado:  PresentationFramework (en PresentationFramework.dll)
XMLNS para XAML: http://schemas.microsoft.com/winfx/2006/xaml/presentation, http://schemas.microsoft.com/netfx/2007/xaml/presentation

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

Valores XAML

ControlTemplate

Elemento de objeto para ControlTemplate o una clase derivada.

VisualTreeRootNode

Un solo elemento XAML como el elemento secundario inmediato de ControlTemplate (o clase derivada). Las plantillas deben tener un solo nodo raíz. Para que se genere una plantilla útil, el elemento elegido como VisualTreeRootNode debe admitir un modelo de contenido propio; suele ser 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 elemento secundario, sólo puede haber un elemento declarado como VisualTreeNodeContents. También es posible (aunque poco frecuente) proporcionar contenido de texto si el elemento elegido como VisualTreeRootNode admite una propiedad de contenido de texto.

El tipo ControlTemplate expone los siguientes miembros.

  NombreDescripción
Método públicoControlTemplate()Inicializa una nueva instancia de la clase ControlTemplate.
Método públicoControlTemplate(Type)Inicializa una nueva instancia de la clase ControlTemplate con el tipo de destino especificado.
Arriba

  NombreDescripción
Propiedad públicaDispatcherObtiene el objeto Dispatcher al que está asociado DispatcherObject. (Se hereda de DispatcherObject).
Propiedad públicaHasContentObtiene un valor que indica si esta plantilla tiene contenido optimizado. (Se hereda de FrameworkTemplate).
Propiedad públicaIsSealedObtiene un valor que indica si este objeto está en un estado inmutable y, por lo tanto, no se puede cambiar. (Se hereda de FrameworkTemplate).
Propiedad públicaResourcesObtiene o establece la colección de recursos que se pueden usar en el ámbito de esta plantilla. (Se hereda de FrameworkTemplate).
Propiedad públicaTargetTypeObtiene o establece el tipo para el que está prevista esta ControlTemplate.
Propiedad públicaTemplateObtiene o establece una referencia al objeto que graba o reproduce los nodos XAML de la plantilla cuando un sistema de escritura define o aplica la plantilla. (Se hereda de FrameworkTemplate).
Propiedad públicaTriggersObtiene una colección de objetos TriggerBase que aplican cambios de propiedad o realizan acciones basándose en condiciones especificadas.
Propiedad públicaVisualTreeObtiene o establece el nodo raíz de la plantilla. (Se hereda de FrameworkTemplate).
Arriba

  NombreDescripción
Método públicoCheckAccessDetermina si el subproceso de la llamada tiene acceso a DispatcherObject. (Se hereda de DispatcherObject).
Método públicoEquals(Object)Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoFindNameBusca el elemento asociado al nombre especificado que se ha definido en esta plantilla. (Se hereda de FrameworkTemplate).
Método públicoGetHashCodeActúa como función hash para un tipo concreto. (Se hereda de Object).
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoLoadContentCarga el contenido de la plantilla como una instancia de un objeto y devuelve el elemento raíz del contenido. (Se hereda de FrameworkTemplate).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoRegisterNameRegistra un nuevo par de nombre y objeto en el ámbito de nombres actual. (Se hereda de FrameworkTemplate).
Método públicoSealBloquea la plantilla de modo que no se pueda modificar. (Se hereda de FrameworkTemplate).
Método públicoShouldSerializeResourcesDevuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad Resources en las instancias de esta clase. (Se hereda de FrameworkTemplate).
Método públicoShouldSerializeVisualTreeDevuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad VisualTree en las instancias de esta clase. (Se hereda de FrameworkTemplate).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoUnregisterNameQuita una asignación de nombre y objeto del ámbito de nombres XAML. (Se hereda de FrameworkTemplate).
Método protegidoValidateTemplatedParentComprueba el elemento primario con plantilla mediante un conjunto de reglas. (Invalida a FrameworkTemplate.ValidateTemplatedParent(FrameworkElement)).
Método públicoVerifyAccessExige que el subproceso de la llamada tenga acceso a DispatcherObject. (Se hereda de DispatcherObject).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privadoINameScope.FindNameInfraestructura. Devuelve un objeto que tiene el nombre de identificación proporcionado. (Se hereda de FrameworkTemplate).
Implementación explícita de interfacesMétodo privadoIQueryAmbient.IsAmbientPropertyAvailableConsulta si la propiedad de ambiente especificada está disponible en el ámbito actual. (Se hereda de FrameworkTemplate).
Arriba

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

La creación de plantillas de control es una del muchas características proporcionadas por el modelo de estilos y plantillas de WPF. El modelo de estilos y plantillas proporciona una flexibilidad tan amplia que, en muchos casos, no necesita escribir sus propios controles. Si es el autor de una aplicación que desea cambiar la visualización de su control o reemplazar la ControlTemplate de un control existente, consulte el tema Aplicar estilos y plantillas para obtener ejemplos e información detallada.

Si está escribiendo su propio control, vea "Crear un control personalizado" en Información general sobre la creación de controles.

ControlTemplate se ha diseñado para que funcione como una unidad de detalle de implementación autónoma invisible para los objetos y usuarios externos, incluidos los estilos. El contenido de la plantilla de control únicamente se puede manipular desde el interior de la propia plantilla de control.

Lo siguiente muestra un StyleButton que establece ControlTemplate de 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 control Button aparece como Ellipse:

Ejemplo de ControlTemplate de Button

Al establecer la propiedad Template de Control en una nueva ControlTemplate como en el ejemplo anterior, está reemplazando toda la plantilla. Cuando Button tiene el foco o se presiona, tiene todo el aspecto predeterminado del botón que está reemplazando. Por consiguiente, en función de sus necesidades, puede desear introducir su definición de a qué se debería parecer su botón cuando se presiona, etc. 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>


Observe que este ejemplo hace referencia a recursos que no se muestran aquí. Para obtener el ejemplo completo, vea Styling with ControlTemplates Sample. En este ejemplo se proporcionan ejemplos de plantillas de control para numerosos controles y es la mejor manera de iniciarse en la creación de plantillas de control.

.NET Framework

Compatible con: 4, 3.5, 3.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft