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 para o controle. Os 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 para o controle. Para funcionar corretamente como parte da pesquisa de estilo de tema, espera-se que esse valor seja um valor System.Type .
Observação
As extensões de componente do Visual C++ (C++/CX) usam uma cadeia de caracteres que é o nome qualificado do tipo. Mas isso depende do 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 personalizados em que você definirá DefaultStyleKey, você também substituirá OnApplyTemplate.
O tipo de retorno de DefaultStyleKey é digitado livremente como Object na sintaxe, mas o sistema de estilo XAML espera que o valor forneça uma referência de tipo:
- Para um controle que tem 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 tem sua lógica escrita no Microsoft Visual Basic, o valor de DefaultStyleKey deve ser uma instância de System.Type. Normalmente, você define esse valor no construtor padrão:
Public Sub New()
Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
CustomControl1::CustomControl1() // public: in the header.
{
DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
- Para um controle que tem sua lógica escrita em extensões de componente do Visual C++ (C++/CX), o valor de DefaultStyleKey deve ser uma cadeia de caracteres qualificada por 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 = "App1.CustomControl1";
}
Observação
Por fim, a cadeia de caracteres sozinha não é suficiente para dar suporte a uma referência de tipo C++/CX (extensões de componente do Visual C++). Se você usar as opções Adicionar/Novo Item/Controle Modelo em Gerenciador de Soluções, os modelos e o suporte para extensões de componente do Visual C++ (C++/CX) 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 que você opte por não redefinir o valor, verifique se o estilo padrão original é útil para renderizar o 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 que o Windows Runtime define. 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 realmente são fundamentalizados 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, pressupõe-se implicitamente 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.UI.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 mapeado para o código e namespaces do aplicativo) deve preceder o nome do 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 escolhido para sua classe de controle personalizada. Para corresponder aos 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.
Observação
O prefixo "local:" é isolado para o XAML em que é definido e usado. Os namespaces XAML e os prefixos só têm significado dentro do XAML e são independentes para cada arquivo XAML. Os valores DefaultStyleKey no código não incluem os prefixos.