ControlTemplate ControlTemplate ControlTemplate ControlTemplate Class

Definición

Especifica la estructura visual y los aspectos de comportamiento de Control que se puede compartir entre varias instancias del control.Specifies the visual structure and behavioral aspects of a Control that can be shared across multiple instances of the control.

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
type ControlTemplate = class
    inherit FrameworkTemplate
Public Class ControlTemplate
Inherits FrameworkTemplate
Herencia
Atributos

Ejemplos

El siguiente se muestra un Button Style que establece el ControlTemplate de un Button:The following shows a Button Style that sets the ControlTemplate of a 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 un Ellipse:When this gets applied, the Button appears as an Ellipse:

Ejemplo de ControlTemplate de ButtonButton ControlTemplate sample

Al establecer el Template propiedad de un Control a un nuevo ControlTemplate como se muestra en el ejemplo anterior, se va a sustituir toda la plantilla.When you set the Template property of a Control to a new ControlTemplate as in the above example, you are replacing the entire template. ¿Qué la Button aspecto cuando tiene el foco o presiona forma parte de la apariencia predeterminada del botón que se va a sustituir.What the Button looks like when it is in focus or pressed is all part of the default appearance of the button that you are replacing. Por lo tanto, según sus necesidades, es posible que desee colocar en la definición de aspecto cuando se presiona el botón y así sucesivamente, como en el ejemplo siguiente:Therefore, depending on your needs, you may want to put in your definition what your button should look like when it is pressed, and so on, as in the following example:

<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 los recursos que no se muestran aquí.Note that this example references resources that are not shown here. Para ver un ejemplo completo, consulte Aplicación de estilos con el ejemplo ControlTemplates.For the complete sample, see Styling with ControlTemplates Sample. Ese ejemplo proporciona ejemplos de plantillas de control para muchos controles y es la mejor manera para que pueda empezar a trabajar con la creación de plantillas de control.That sample provides examples of control templates for many controls and is the best way for you to get started with creating control templates.

Comentarios

El ControlTemplate le permite especificar la estructura visual de un control.The ControlTemplate allows you to specify the visual structure of a 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.The control author can define the default ControlTemplate and the application author can override the ControlTemplate to reconstruct the visual structure of the control.

Creación de plantillas de control es una de las muchas características que ofrece el WPFWPF modelo aplicar estilos y plantillas.Control templating is one of the many features offered by the WPFWPF styling and templating model. El modelo de estilos y plantillas le proporciona flexibilidad tan amplia que en muchos casos no es necesario escribir sus propios controles.The styling and templating model provides you with such great flexibility that in many cases you do not need to write your own controls. Si es un autor de la aplicación que desea cambiar la visualización del control o para reemplazar el ControlTemplate de un control existente, consulte el aplicar estilos y plantillas tema para ver ejemplos y una explicación más detallada.If you are an application author that wants to change the visualization of your control or to replace the ControlTemplate of an existing control, see the Styling and Templating topic for examples and an in-depth discussion.

Si está escribiendo su propio control, vea "Crear un Control personalizado" en el Control Authoring Overview.If you are writing your own control, see "Create a Custom Control" in the Control Authoring Overview.

Un ControlTemplate está pensado para ser una unidad autónoma de detalle de implementación que no es visible para los objetos, incluidos los estilos y los usuarios externos.A ControlTemplate is intended to be a self-contained unit of implementation detail that is invisible to outside users and objects, including styles. Es la única manera de manipular el contenido de la plantilla de control desde la misma plantilla de control.The only way to manipulate the content of the control template is from within the same control template.

Uso de elementos de propiedad XAMLXAML Property Element Usage

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

Valores XAMLXAML Values

ControlTemplateControlTemplate
Elemento de objeto para ControlTemplate o una clase derivada.Object element for ControlTemplate or a derived class.

VisualTreeRootNodeVisualTreeRootNode
Una sola XAMLXAML como el elemento secundario inmediato del elemento el ControlTemplate (o una clase derivada).A single XAMLXAML element as the immediate child of the ControlTemplate (or a derived class). Las plantillas deben tener un único nodo raíz.Templates must have a single root node. Con el fin de generar una plantilla útil, el elemento elegido como VisualTreeRootNode espera que admita un modelo de contenido de su propia, a menudo un modelo que admite varios elementos secundarios.In order to generate a useful template, the element chosen as VisualTreeRootNode is expected to support a content model of its own, often a model that supports multiple child elements.

VisualTreeNodeContentsVisualTreeNodeContents
Uno o más elementos que completan la plantilla.One or more elements that complete the intended template. Si el elemento elegido como VisualTreeRootNode sólo admite un único elemento secundario, a continuación, puede haber solo se puede declarar un elemento como VisualTreeNodeContents.If the element chosen as VisualTreeRootNode only supports a single child, then there can only be one element declared as VisualTreeNodeContents. También es posible (aunque poco frecuente) proporcionar contenido de texto si los elegidos VisualTreeRootNode admite una propiedad de contenido de texto.It is also possible (though uncommon) to provide text content if the chosen VisualTreeRootNode supports a text content property.

Constructores

ControlTemplate() ControlTemplate() ControlTemplate() ControlTemplate()

Inicializa una nueva instancia de la clase ControlTemplate.Initializes a new instance of the ControlTemplate class.

ControlTemplate(Type) ControlTemplate(Type) ControlTemplate(Type) ControlTemplate(Type)

Inicializa una nueva instancia de la clase ControlTemplate con el tipo de destino especificado.Initializes a new instance of the ControlTemplate class with the specified target type.

Propiedades

Dispatcher Dispatcher Dispatcher Dispatcher

Obtiene el Dispatcher esto DispatcherObject está asociado.Gets the Dispatcher this DispatcherObject is associated with.

(Inherited from DispatcherObject)
HasContent HasContent HasContent HasContent

Obtiene un valor que indica si esta plantilla tiene contenido optimizado.Gets a value that indicates whether this template has optimized content.

(Inherited from FrameworkTemplate)
ISealable.CanSeal ISealable.CanSeal ISealable.CanSeal ISealable.CanSeal Inherited from FrameworkTemplate
ISealable.IsSealed ISealable.IsSealed ISealable.IsSealed ISealable.IsSealed Inherited from FrameworkTemplate
IsSealed IsSealed IsSealed IsSealed

Obtiene un valor que indica si este objeto está en un estado inmutable y, por lo tanto, no se puede cambiar.Gets a value that indicates whether this object is in an immutable state so it cannot be changed.

(Inherited from FrameworkTemplate)
Resources Resources Resources Resources

Obtiene o establece la colección de recursos que se pueden usar en el ámbito de esta plantilla.Gets or sets the collection of resources that can be used within the scope of this template.

(Inherited from FrameworkTemplate)
TargetType TargetType TargetType TargetType

Obtiene o establece el tipo para el que está pensado este elemento ControlTemplate.Gets or sets the type for which this ControlTemplate is intended.

Template Template Template Template

Obtiene 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.Gets or sets a reference to the object that records or plays the XAML nodes for the template when the template is defined or applied by a writer.

(Inherited from FrameworkTemplate)
Triggers Triggers Triggers Triggers

Obtiene una colección de objetos TriggerBase que aplican cambios de propiedad o realizan acciones basándose en condiciones especificadas.Gets a collection of TriggerBase objects that apply property changes or perform actions based on specified conditions.

VisualTree VisualTree VisualTree VisualTree

Obtiene o establece el nodo raíz de la plantilla.Gets or sets the root node of the template.

(Inherited from FrameworkTemplate)

Métodos

CheckAccess() CheckAccess() CheckAccess() CheckAccess()

Determina si el subproceso de llamada tiene acceso a este DispatcherObject.Determines whether the calling thread has access to this DispatcherObject.

(Inherited from DispatcherObject)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
FindName(String, FrameworkElement) FindName(String, FrameworkElement) FindName(String, FrameworkElement) FindName(String, FrameworkElement)

Busca el elemento asociado al nombre especificado que se ha definido en esta plantilla.Finds the element associated with the specified name defined within this template.

(Inherited from FrameworkTemplate)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
LoadContent() LoadContent() LoadContent() LoadContent()

Carga el contenido de la plantilla como una instancia de un objeto y devuelve el elemento raíz del contenido.Loads the content of the template as an instance of an object and returns the root element of the content.

(Inherited from FrameworkTemplate)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
RegisterName(String, Object) RegisterName(String, Object) RegisterName(String, Object) RegisterName(String, Object)

Registra un nuevo par de nombre y objeto en el ámbito de nombres actual.Registers a new name/object pair into the current name scope.

(Inherited from FrameworkTemplate)
Seal() Seal() Seal() Seal()

Bloquea la plantilla de modo que no se pueda modificar.Locks the template so it cannot be changed.

(Inherited from FrameworkTemplate)
ShouldSerializeResources(XamlDesignerSerializationManager) ShouldSerializeResources(XamlDesignerSerializationManager) ShouldSerializeResources(XamlDesignerSerializationManager) ShouldSerializeResources(XamlDesignerSerializationManager)

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad Resources en las instancias de esta clase.Returns a value that indicates whether serialization processes should serialize the value of the Resources property on instances of this class.

(Inherited from FrameworkTemplate)
ShouldSerializeVisualTree() ShouldSerializeVisualTree() ShouldSerializeVisualTree() ShouldSerializeVisualTree()

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad VisualTree en las instancias de esta clase.Returns a value that indicates whether serialization processes should serialize the value of the VisualTree property on instances of this class.

(Inherited from FrameworkTemplate)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)
UnregisterName(String) UnregisterName(String) UnregisterName(String) UnregisterName(String)

Quita una asignación de nombre y objeto del ámbito de nombres XAML.Removes a name/object mapping from the XAML namescope.

(Inherited from FrameworkTemplate)
ValidateTemplatedParent(FrameworkElement) ValidateTemplatedParent(FrameworkElement) ValidateTemplatedParent(FrameworkElement) ValidateTemplatedParent(FrameworkElement)

Comprueba el elemento primario con plantilla mediante un conjunto de reglas.Checks the templated parent against a set of rules.

VerifyAccess() VerifyAccess() VerifyAccess() VerifyAccess()

Exige que el subproceso que realiza la llamada tenga acceso a este DispatcherObject.Enforces that the calling thread has access to this DispatcherObject.

(Inherited from DispatcherObject)

Implementaciones de interfaz explícitas

INameScope.FindName(String) INameScope.FindName(String) INameScope.FindName(String) INameScope.FindName(String)

Devuelve un objeto que tiene el nombre de identificación proporcionado.Returns an object that has the provided identifying name.

(Inherited from FrameworkTemplate)
IQueryAmbient.IsAmbientPropertyAvailable(String) IQueryAmbient.IsAmbientPropertyAvailable(String) IQueryAmbient.IsAmbientPropertyAvailable(String) IQueryAmbient.IsAmbientPropertyAvailable(String)

Consulta si la propiedad de ambiente especificada está disponible en el ámbito actual.Queries whether a specified ambient property is available in the current scope.

(Inherited from FrameworkTemplate)
ISealable.Seal() ISealable.Seal() ISealable.Seal() ISealable.Seal() Inherited from FrameworkTemplate

Se aplica a

Consulte también: