Control.DefaultStyleKey Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define a chave que faz referência ao estilo padrão do controle. Autores de controles personalizados usam essa propriedade para alterar o padrão para o estilo que seu controle usa.
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 da propriedade
A chave que faz referência ao estilo padrão do controle. Para funcionar corretamente como parte da pesquisa de estilo de tema, espera-se que esse valor seja um valor System.Type .
Note
O C++ usa uma cadeia de caracteres que é o nome qualificado do tipo. Mas isso se baseia no código gerado que produz um TypeName uma vez acessado por um compilador XAML; consulte Comentários.
Comentários
DefaultStyleKey é uma das poucas propriedades protegidas na API Windows Runtime. Destina-se apenas ao uso por autores de controle, que estarão subclasse de alguma classe de controle existente e, portanto, terão o acesso necessário para definir essa propriedade. Para muitos cenários de controle personalizado em que você definirá DefaultStyleKey, você também substituirá OnApplyTemplate.
O tipo de retorno de DefaultStyleKey é digitado livremente como Objeto na sintaxe, mas o sistema de estilo XAML espera que o valor forneça uma referência de tipo:
- Para um controle que tenha sua lógica escrita em C#, o valor de DefaultStyleKey deve ser uma instância de System.Type. Normalmente, você define esse valor no construtor padrão:
public CustomControl1()
{
this.DefaultStyleKey = typeof(CustomControl1);
}
- Para um controle que tenha sua lógica escrita em C++, o valor de DefaultStyleKey deve ser uma cadeia de caracteres qualificada para namespace que é o nome da classe de controle personalizada. Normalmente, você define esse valor no construtor padrão:
CustomControl1::CustomControl1() // public: in the header.
{
DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
Note
Por fim, a cadeia de caracteres sozinha não é suficiente para dar suporte a uma referência de tipo C++. Se você usar as opções Adicionar/Novo Item/Controle Modelo em Gerenciador de Soluções, os modelos e o suporte para C++ e XAML gerarão classes que fornecem informações de IXamlMetadataProvider. O compilador XAML pode acessar esse código quando o XAML é carregado e o usa para validar e criar tipos e membros e ingressar nas classes parciais. Quanto ao que você define em seu próprio código de aplicativo, a cadeia de caracteres é tudo o que você precisa. Mas, se você estiver curioso, poderá dar uma olhada nos arquivos XamlTypeInfo.g.h e XamlTypeInfo.g.cpp gerados.
Os autores de controle poderiam optar por não fornecer um valor para DefaultStyleKey, mas isso é incomum. O resultado seria que o estilo padrão é o conforme definido pela classe base. Em alguns casos (como para ContentControl), o valor é nulo. Mesmo se você optar por não redefinir o valor, verifique se o estilo padrão original é útil para renderizar seu controle.
Quando um controle XAML é carregado, o processo de renderização é iniciado e o sistema está procurando o modelo correto a ser aplicado, o que está sendo carregado é o estilo padrão XAML para o controle, incluindo seu modelo. Incluído no Windows Runtime é uma cópia interna de todos os estilos padrão para todos os controles XAML definidos pelo Windows Runtime. A referência de tipo em DefaultStyleKey informa ao sistema qual recurso XAML nomeado deve ser carregado como esse estilo. No formato XAML, os estilos são realmente chaveados por tipo, embora não haja nenhum mecanismo em Windows Runtime XAML que defina explicitamente uma referência de tipo. Mas para qualquer valor TargetType , que é o atributo que contém a chave para pesquisa, é implicitamente assumido representar uma referência de tipo na forma de uma cadeia de caracteres. Por exemplo, DefaultStyleKey de um Botão é uma instância System.Type em que o Nome é "Button", FullName é "Windows. Interface do usuário. Xaml.Controls.Button". O sistema usa essas informações para saber carregar o Estilo dos recursos internos que têm TargetType="Button".
Os controles personalizados geralmente não estão no namespace XAML padrão. Em vez disso, eles estão em um namespace XAML que tem uma instrução using: para fazer referência ao namespace de código do aplicativo. Por padrão, os projetos criam um prefixo "local:" que mapeia esse namespace para você. Você também pode mapear outros namespaces XAML para se referir a namespaces de código adicionais para controles ou outro código que seu aplicativo define.
O prefixo "local:" (ou algum outro namespace que mapeia para o código e os namespaces do aplicativo) deve preceder o nome do seu controle personalizado, quando ele estiver em XAML como o valor TargetType . Isso também já é feito para você pelos modelos iniciais; ao adicionar um novo controle, você verá um arquivo generic.xaml que contém apenas um estilo. Esse estilo terá o valor TargetType que é uma cadeia de caracteres começando com "local:" e concluída pelo nome que você escolheu para sua classe de controle personalizada. Para corresponder a exemplos anteriores que definem DefaultStyleKey em uma CustomControl1 definição, você verá um elemento para <Style TargetType="local:CustomControl1"> definido no generic.xaml inicial e esse estilo define o modelo de controle, bem como a configuração de outras propriedades.
Note
O prefixo "local:" é isolado para o XAML onde ele é definido e usado. Os namespaces XAML e os prefixos só têm significado dentro de XAML e são autocontidos para cada arquivo XAML. Os valores DefaultStyleKey no código não incluem os prefixos.