Control.DefaultStyleKey Propiedad

Definición

Obtiene o establece la clave que hace referencia al estilo predeterminado del control. Los autores de controles personalizados usan esta propiedad para cambiar el valor predeterminado del estilo que usa su control.

protected:
 property Platform::Object ^ DefaultStyleKey { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DefaultStyleKey();

void DefaultStyleKey(IInspectable value);
protected object DefaultStyleKey { get; set; }
Protected Property DefaultStyleKey As Object

Valor de propiedad

Object

Platform::Object

IInspectable

Clave que hace referencia al estilo predeterminado del control. Para funcionar correctamente como parte de la búsqueda de estilo de tema, se espera que este valor sea un valor System.Type .

Nota:

Las extensiones de componentes de Visual C++ (C++/CX) usan una cadena que es el nombre completo del tipo. Pero esto se basa en el código generado que genera un TypeName una vez al que accede un compilador XAML; vea Comentarios.

Comentarios

DefaultStyleKey es una de las pocas propiedades protegidas de la API de Windows Runtime. Está pensado solo para que lo usen los autores de controles, que van a subclasar algunas clases de control existentes y, por lo tanto, tienen el acceso necesario para establecer esta propiedad. Para muchos escenarios de control personalizados en los que va a establecer DefaultStyleKey, también se reemplazará OnApplyTemplate.

El tipo devuelto de DefaultStyleKey se escribe de forma flexible como Object en la sintaxis, pero el sistema de estilo XAML esperará que el valor proporcione una referencia de tipo:

  • Para un control que tiene su lógica escrita en C#, el valor de DefaultStyleKey debe ser una instancia de System.Type. Normalmente se establece este valor en el constructor predeterminado:
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
  • Para un control que tiene su lógica escrita en Microsoft Visual Basic, el valor de DefaultStyleKey debe ser una instancia de System.Type. Normalmente se establece este valor en el constructor predeterminado:
Public Sub New()
    Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
  • Para un control que tiene su lógica escrita en extensiones de componentes de Visual C++ (C++/CX), el valor de DefaultStyleKey debe ser una cadena calificada por el espacio de nombres que sea el nombre de la clase de control personalizada. Normalmente se establece este valor en el constructor predeterminado:
CustomControl1::CustomControl1() //public: in the header
{
    DefaultStyleKey = "App1.CustomControl1";
}

Nota:

En última instancia, la cadena por sí sola no es suficiente para admitir una referencia de tipo de extensiones de componentes de Visual C++ (C++/CX). Si usas las opciones Agregar/ Nuevo elemento/Control con plantilla en Explorador de soluciones, las plantillas y la compatibilidad con extensiones de componentes de Visual C++ (C++/CX) y XAML genera clases que proporcionan información de IXamlMetadataProvider. El compilador XAML puede acceder a este código cuando se carga el CÓDIGO XAML y lo usa para validar y crear tipos y miembros y unir las clases parciales. En cuanto a lo que defina en su propio código de aplicación, la cadena es todo lo que necesita. Pero si tienes curiosidad, puedes echar un vistazo a los archivos XamlTypeInfo.g.h y XamlTypeInfo.g.cpp que se generan.

Los autores de controles podrían optar por no proporcionar un valor para DefaultStyleKey, pero es poco común. El resultado sería que el estilo predeterminado es el definido por la clase base. En algunos casos (como para ContentControl), el valor es NULL. Incluso si decide no redefinir el valor, asegúrese de que el estilo predeterminado original es útil para representar el control.

Cuando se carga un control XAML, se inicia el proceso de representación y el sistema busca la plantilla correcta que se va a aplicar, lo que se carga es el estilo predeterminado XAML para el control, incluida su plantilla. Incluido en el Windows Runtime es una copia interna de todos los estilos predeterminados para todos los controles XAML que define el Windows Runtime. La referencia de tipo de DefaultStyleKey indica al sistema qué recurso XAML con nombre se va a cargar como este estilo. En formato XAML, los estilos realmente se claven por tipo, aunque no haya ningún mecanismo en Windows Runtime XAML que defina explícitamente una referencia de tipo. Pero para cualquier valor TargetType , que es el atributo que contiene la clave para la búsqueda, se supone implícitamente que representa una referencia de tipo en forma de cadena. Por ejemplo, DefaultStyleKey de un Button es una instancia de System.Type donde el nombre es "Button", FullName es "Windows.UI.Xaml.Controls.Button". El sistema usa esta información para saber cómo cargar el estilo de los recursos internos que tienen TargetType="Button".

Normalmente, los controles personalizados no están en el espacio de nombres XAML predeterminado. En su lugar, están en un espacio de nombres XAML que tiene una instrucción using: para hacer referencia al espacio de nombres de código de la aplicación. De forma predeterminada, los proyectos crean un prefijo "local:" que asigna automáticamente este espacio de nombres. También puedes asignar otros espacios de nombres XAML para hacer referencia a espacios de nombres de código adicionales para controles u otro código que define la aplicación.

El prefijo "local:" (o algún otro espacio de nombres que se asigna al código y los espacios de nombres de la aplicación) debe preceder al nombre del control personalizado, cuando está en XAML como el valor TargetType . Esto también se hace para usted mediante las plantillas de inicio; al agregar un nuevo control, verá un archivo generic.xaml que contiene un solo estilo. Ese estilo tendrá el valor TargetType que es una cadena a partir de "local:" y completada por el nombre que eligió para la clase de control personalizada. Para buscar coincidencias con ejemplos anteriores que establecen DefaultStyleKey en una CustomControl1 definición, verá un elemento para <Style TargetType="local:CustomControl1"> definido en generic.xaml inicial y ese estilo define la plantilla de control, así como establecer otras propiedades.

Nota:

El prefijo "local:" está aislado en el XAML donde se define y se usa. Los espacios de nombres XAML y los prefijos solo tienen significado en XAML y son independientes para cada archivo XAML. Los valores DefaultStyleKey del código no incluyen los prefijos.

Se aplica a

Consulte también