Estilo Class

Contiene establecedores de propiedades que se pueden compartir entre las instancias de un tipo. Un Style se declara normalmente en una colección de recursos para que se puedan compartir y usar para la aplicación de plantillas de control y otros estilos.

Herencia

Object
  DependencyObject
    Style

Sintaxis


public sealed class Style : DependencyObject


<Style .../>
-or-
<Style ...>
  oneOrMoreSetters
</Style>

XAML Values

oneOrMoreSetters

Uno o más elementos del objeto Setter.

Atributos

[ContentProperty("Name=Setters")]
[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]
[WebHostHidden()]

Members

A continuación se indican los tipos de miembros de Style (Clase):

Constructores

A continuación se indican los constructores de Style (Clase).

ConstructorDescripción
Style() Initializes a new instance of the Style class, with no initial TargetType and an empty Setters collection.
Style(TypeName) Initializes a new instance of the Style class, with a specified initial TargetType and an empty Setters collection.

 

Métodos

The Style Clase tiene estos métodos. También hereda métodos de Object Clase.

MétodoDescripción
ClearValue Clears the local value of a dependency property. (Se hereda de DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Se hereda de DependencyObject)
GetValue Returns the current effective value of a dependency property from a DependencyObject. (Se hereda de DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Se hereda de DependencyObject)
Seal Locks the style so that the TargetType property or any Setter in the Setters collection cannot be changed.
SetValue Sets the local value of a dependency property on a DependencyObject. (Se hereda de DependencyObject)

 

Propiedades

StyleClase tiene estas propiedades.

PropiedadTipo de accesoDescripción

BasedOn

Lectura/escrituraGets or sets a defined style that is the basis of the current style.

Dispatcher

De sólo lecturaGets the CoreDispatcher that this object is associated with. (Se hereda de DependencyObject)

IsSealed

De sólo lecturaGets a value that indicates whether the style is read-only and cannot be changed.

Setters

De sólo lecturaGets a collection of Setter objects.

TargetType

Lectura/escrituraGets or sets the type for which the style is intended. TargetType can be used to declare an implicit style resource if there's no resource key specified.

 

Comentarios

Un Style es básicamente una colección de valores de propiedades aplicadas a una o varias instancias de un tipo concreto que tenga estas propiedades. Style contiene una colección de uno o más objetos Setter. Cada Setter tiene una propiedad Property y una propiedad Value. Property es el nombre de la propiedad del elemento al que se aplica el estilo. Value es el valor que se aplica a la propiedad.

Para aplicar un Style, el objeto de destino debe ser un objeto DependencyObject. La propiedad a la que cada objeto Setter hace referencia como valor de una propiedad Property debe ser una propiedad de dependencia.

Se debe establecer la propiedad TargetType cuando se crea un Style. De lo contrario, se produce una excepción.

Si se establece un valor para la misma propiedad en un Style y también en un elemento directamente, tiene prioridad el valor establecido en el elemento. Para obtener más información, vea Información general sobre las propiedades de dependencia, concretamente la sección “Prioridad de valor de propiedad de dependencia”.

Definir un Style como un recurso XAML

Un Style se define casi siempre en XAML como recurso en un ResourceDictionary.

  • Para una clase Style que se usa solo en otros elementos de la interfaz de usuario definidos en la misma página XAML, deberá definir la clase Style en la colección FrameworkElement.Resources (Page.Resources si el elemento raíz es una clase Page).
  • Para una clase Style que se usa en más de una página de su aplicación, deberá definir la clase Style en la colección Application.Resources. Como alternativa, es posible que disponga de un archivo XAML independiente para la aplicación que se incluye en la propiedad Application.Resources como valor MergedDictionaries.
  • La mayoría de los elementos de la interfaz de usuario tienen un estilo predeterminado definido por Windows en tiempo de ejecución. Las copias de los estilos predeterminados se pueden ver en el archivo XAML auxiliar de diseño denominado generic.xaml, que no es técnicamente un archivo de recursos para aplicaciones, aunque tiene la misma estructura que este tipo de archivos. Puede copiar partes discretas de este archivo en el XAML de su aplicación como punto inicial cuando edita copias de estilos habilitadas por las herramientas, pero solo una vez que es necesario incluir esa copia en una de las colecciones de Resources o acceder indirectamente a ella mediante MergedDictionaries. En todos estos casos el XAML modificado que invalida el valor predeterminado se incluye como parte de la aplicación.

Windows 8:  Si está creando nuevas plantillas de un control existente en XAML de Windows 8, modifique a veces los elementos de Style que existen en el archivo XAML StandardStyles.xaml incluido en la mayoría de las plantillas de aplicación iniciales. Los archivos de plantilla app.xaml hacen referencia a StandardStyles.xaml como un archivo de código fuente MergedDictionaries. Las plantillas para aplicaciones a partir de Windows 8.1 ya no utilizan StandardStyles.xaml.

Un elemento definido de Style en un ResourceDictionary no tiene que tener obligatoriamente un atributo x:Key o un atributo x:Name, que suele ser un requisito de un recurso XAML. Un Style definido de esta forma usa su valor de propiedad TargetType como clave implícita y se conoce como estilo implícito.

Para obtener más información sobre cómo usar diccionarios de recursos XAML, vea Referencias de recursos XAML y ResourceDictionary.

Estilos y plantillas

Puede utilizar Setter en Style para aplicar valores a cualquier propiedad de dependencia. Sin embargo, la clase Setter para la propiedad Template de una clase derivada de Control es la que constituye a la mayor parte del marcado XAML en las clases Style típicas. Value para Setter con Property="Template" se especifica casi siempre como un elemento de propiedad que contiene un elemento de objeto ControlTemplate.

Cuando se utiliza 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 utilizar el mismo valor.

El establecedor Template define la definición de UI de plantilla básica para una instancia del control donde se aplica esa plantilla. También contiene los estados visuales de un control, y otras definiciones de interfaz de usuario basadas en el estado, como las transiciones del tema predeterminado. Para un control complejo como, por ejemplo ListBox, la plantilla predeterminada de la clase Style y ControlTemplate puede contener cientos de líneas de XAML. Para obtener más información sobre el rol de Style en escenarios de plantillas de control, vea Inicio rápido: plantillas de control.

La plantilla para un control incluye a menudo los estados visuales que modifican la apariencia del control en respuesta a estados lógicos. Por ejemplo, la clase Button puede tener una apariencia visual distinta cuando se presiona mediante la aplicación de un nuevo estado visual desde su plantilla y todos los cambios de apariencia pueden proceder de XAML y no del código. Para obtener más información sobre cómo funcionan los estados visuales y cómo modificarlos o definir estados para controles personalizados, vea Animaciones de guion gráfico para estados visuales e Inicio rápido: plantillas de control.

Estilos y comportamiento del runtime

Puede cambiar los valores de propiedades individuales que se han establecido mediante un Style en tiempo de ejecución y los nuevos valores sobrescriben los valores de Setters. Por ejemplo, puede establecer la propiedad Template en tiempo de ejecución incluso si un estilo ha establecido esta propiedad.

Puede ajustar las propiedades de un Style en tiempo de ejecución, pero solo si ese estilo no se ha aplicado nada y solo existe como un recurso que no se utiliza implícitamente. Por ejemplo, puede agregar establecedores a la colección de Setters para un estilo que existe en Resources con un atributo x:Key pero no tiene ningún valor StaticResource en otro lugar de XAML que haga referencia a dicho estilo. Sin embargo, tan pronto como se hace referencia a un Style y se usa para valores por un objeto cargado, Style se debe considerar sellado. Puede detectar el estado sellado comprobando el valor de la propiedad IsSealed para Style. Si es true, se sella el estilo y no podrá modificar ninguna propiedad de este o de los subvalores de Setter que se encuentren dentro. El momento en que un estilo se empieza a usar y se sella, también se puede detectar cuándo el objeto en el que se hace referencia a Style desencadena el evento Loaded.

Estilos BasedOn

Puede crear un nuevo estilo basado en un estilo existente definido por la aplicación o por estilos predeterminados para los controles de Windows en tiempo de ejecución. Para ello, puede usar la propiedad BasedOn. Esto reduce la duplicación en su XAML y facilita el seguimiento para controlar los recursos. Cada estilo solo admite un valor de BasedOn. Para obtener más información, vea BasedOn o Inicio rápido: aplicar estilos a controles.

Estilos implícitos

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

Notas sobre la sintaxis XAML

Setters es la propiedad de contenido XAML de Style, así que puede usar una sintaxis de colección implícita como <Style><Setter .../><Setter .../></Style>.

Es muy poco frecuente utilizar la clase Style en código (por ejemplo, llamando a un constructor y aumentando los valores Setter de uno en uno). Los estilos se utilizan para las plantillas, y estas deben estar disponibles en tiempo de carga de XAML, de modo que los objetos Style creados en el código suelen estar disponibles demasiado tarde para aplicarse a los controles de una interfaz de usuario.

Ejemplos

Este ejemplo crea dos estilos: uno para TextBlock y el otro para TextBox. Cada estilo se aplica a dos instancias de un control para crear una apariencia uniforme para cada TextBlock y TextBox. En el ejemplo se establece la propiedad FrameworkElement.Style de cada control haciendo referencia a Style como StaticResource.

Observe que en el estilo para TextBox, la propiedad Margin está establecida en 4, lo que significa que TextBox tiene un margen de 4 en todos los lados. Para compensar la longitud del segundo TextBlock, que es más corto que el primer TextBlock porque Apellido ocupa menos espacio que Nombre, se asigna un valor de "6,4,4,4" a la propiedad Margin en el segundo TextBox. Esto provoca que el segundo TextBox tenga un margen diferente que lo que se especifica en el estilo, para que se alinee horizontalmente con el primer TextBox.


<StackPanel>
  <StackPanel.Resources>
    <!--Create a Style for a TextBlock to specify that the
              Foreground equals Navy, FontSize equals 14, and
              VerticalAlignment equals Botton.-->
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
      <Setter Property="Foreground" Value="Navy"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="VerticalAlignment" Value="Bottom"/>
    </Style>

    <!--Create a Style for a TextBlock that specifies that
              the Width is 200, Height is 20, Margin is 4,
              Background is LightBlue, and FontSize is 14.-->
    <Style TargetType="TextBox" x:Key="TextBoxStyle">
      <Setter Property="Width" Value="200"/>
      <Setter Property="Height" Value="30"/>
      <Setter Property="Margin" Value="4"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="Background">
        <Setter.Value>
          <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
            <GradientStop Color="White" Offset="0.0"/>
            <GradientStop Color="LightBlue" Offset="0.5"/>
            <GradientStop Color="Navy" Offset="1"/>
          </LinearGradientBrush>
        </Setter.Value>
      </Setter>
    </Style>
  </StackPanel.Resources>

  <!--Apply the TextBlockStyle and TextBoxStyle to each 
          TextBlock and TextBox, respectively.-->
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              First Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              Last Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}"  
                   Margin="6,4,4,4"/>
  </StackPanel>
</StackPanel>


Este ejemplo crea dos elementos de estilo. El TargetType del primer elemento está establecido en TextBox y TargetType para el segundo está establecido en Button. A continuación se aplican como estilo implícito para un control TextBox y un control Button.


<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Foreground" Value="Pink" />
            <Setter Property="FontSize" Value="15" />                
        </Style>
        
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </StackPanel.Resources>
    
    <TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
    <Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>


Este ejemplo crea un objeto Style denominado InheritedStyle basado en un objeto Style denominado BaseStyle. InheritedStyle hereda el valor Background de Yellow de BaseStyle y agrega un valor Foreground de Blue.


<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="BaseStyle" TargetType="Button">
            <Setter Property="Background" Value="Yellow" />
        </Style>
        <!--Create a Style based on BaseStyle-->
        <Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
            <Setter Property="Foreground" Value="Red" />
        </Style>
    </StackPanel.Resources>
    <!--A button with default style-->
    <Button Content="HelloWorld" />
    <!--A button with base style-->
    <Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
    <!--A button with a style that is inherited from the BaseStyle-->
    <Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>


Requisitos

Cliente mínimo admitido

Windows 8 [Solo aplicaciones de la Tienda Windows]

Servidor mínimo admitido

Windows Server 2012 [Solo aplicaciones de la Tienda Windows]

Espacio de nombres

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

Metadatos

Windows.winmd

Vea también

DependencyObject
ControlTemplate
Setter
Información general sobre las propiedades de dependencia
Referencias de ResourceDictionary y recurso XAML
Inicio rápido: aplicar estilos a controles
Inicio rápido: plantillas de control

 

 

Mostrar:
© 2014 Microsoft