Control.DefaultStyleKey Proprietà

Definizione

Ottiene o imposta la chiave che fa riferimento allo stile predefinito per il controllo. Gli autori di controlli personalizzati usano questa proprietà per modificare l'impostazione predefinita per lo stile utilizzato dal controllo.

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

Valore della proprietà

Object

Platform::Object

IInspectable

Chiave che fa riferimento allo stile predefinito per il controllo. Per funzionare correttamente come parte della ricerca dello stile del tema, questo valore dovrebbe essere un valore System.Type .

Nota

Le estensioni del componente Visual C++ (C++/CX) usano una stringa che rappresenta il nome completo del tipo. Ma questo si basa sul codice generato che produce un TypeName una volta eseguito l'accesso da un compilatore XAML; vedere Osservazioni.

Commenti

DefaultStyleKey è una delle poche proprietà protette nell'API Windows Runtime. È destinato solo agli autori di controlli, che sottoclasseranno una classe di controllo esistente e quindi avranno l'accesso necessario per impostare questa proprietà. Per molti scenari di controllo personalizzati in cui si imposta DefaultStyleKey, si eseguirà anche l'override di OnApplyTemplate.

Il tipo restituito di DefaultStyleKey viene tipizzato in modo libero come Object nella sintassi, ma il sistema di stile XAML prevede che il valore fornisca un riferimento al tipo:

  • Per un controllo con logica scritta in C#, il valore di DefaultStyleKey deve essere un'istanza di System.Type. In genere si imposta questo valore nel costruttore predefinito:
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
  • Per un controllo con la logica scritta in Microsoft Visual Basic, il valore di DefaultStyleKey deve essere un'istanza di System.Type. In genere si imposta questo valore nel costruttore predefinito:
Public Sub New()
    Me.DefaultStyleKey = GetType(CustomControl1)
End Sub
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
  • Per un controllo con la logica scritta nelle estensioni del componente Visual C++ (C++/CX), il valore di DefaultStyleKey deve essere una stringa qualificata per lo spazio dei nomi che corrisponde al nome della classe del controllo personalizzato. In genere si imposta questo valore nel costruttore predefinito:
CustomControl1::CustomControl1() //public: in the header
{
    DefaultStyleKey = "App1.CustomControl1";
}

Nota

In definitiva, la stringa da sola non è sufficiente per supportare un riferimento ai tipi di estensioni del componente Visual C++ (C++/CX). Se usi le opzioni Aggiungi/Nuovo elemento/Controllo basato su modelli in Esplora soluzioni, i modelli e il supporto per le estensioni del componente Visual C++ (C++/CX) e XAML generano classi che forniscono informazioni IXamlMetadataProvider. Il compilatore XAML può accedere a questo codice quando viene caricato il codice XAML e lo usa per convalidare e creare tipi e membri e unire le classi parziali. Per quanto riguarda ciò che definisci nel codice dell'app, la stringa è sufficiente. Tuttavia, se sei curioso, puoi dare un'occhiata ai file XamlTypeInfo.g.h e XamlTypeInfo.g.cpp generati.

Gli autori di controlli potrebbero scegliere di non fornire un valore per DefaultStyleKey, ma questo non è comune. Il risultato è che lo stile predefinito è quello definito dalla classe base. In alcuni casi ,ad esempio per ContentControl, il valore è Null. Anche se si sceglie di non ridefinire il valore, assicurarsi che lo stile predefinito originale sia utile per il rendering del controllo.

Quando viene caricato un controllo XAML, viene avviato il processo di rendering e il sistema sta cercando il modello corretto da applicare, quello che viene caricato è lo stile predefinito XAML per il controllo, incluso il relativo modello. Incluso nella Windows Runtime è una copia interna di tutti gli stili predefiniti per tutti i controlli XAML definiti dal Windows Runtime. Il riferimento al tipo in DefaultStyleKey indica al sistema la risorsa XAML da caricare come questo stile. In formato XAML, gli stili sono veramente con chiave per tipo anche se non esiste alcun meccanismo in Windows Runtime XAML che definisce un riferimento al tipo in modo esplicito. Tuttavia, per qualsiasi valore TargetType , ovvero l'attributo che contiene la chiave per la ricerca, si presuppone implicitamente che rappresenti un riferimento al tipo sotto forma di stringa. Ad esempio, DefaultStyleKey da un controllo Button è un'istanza di System.Type in cui Name è "Button", FullName è "Windows.UI.Xaml.Controls.Button". Il sistema usa queste informazioni per conoscere il caricamento dello stile dalle risorse interne con TargetType="Button".

I controlli personalizzati in genere non si trovano nello spazio dei nomi XAML predefinito. Si trovano invece in uno spazio dei nomi XAML con un'istruzione using: per fare riferimento allo spazio dei nomi del codice dell'app. Per impostazione predefinita, i progetti creano un prefisso "local:" che esegue il mapping di questo spazio dei nomi. Puoi anche eseguire il mapping di altri spazi dei nomi XAML per fare riferimento a spazi dei nomi di codice aggiuntivi per controlli o altro codice definito dall'app.

Il prefisso "local:" (o un altro spazio dei nomi mappato al codice e agli spazi dei nomi dell'app) deve precedere il nome del controllo personalizzato, quando è in XAML come valore TargetType . Questa operazione è già stata eseguita dai modelli iniziali; quando aggiungi un nuovo controllo, vedrai un file generic.xaml che contiene solo uno stile. Tale stile avrà valore TargetType che è una stringa che inizia con "local:" e completata dal nome scelto per la classe di controllo personalizzata. Per trovare una corrispondenza con gli esempi precedenti che impostano DefaultStyleKey in una CustomControl1 definizione, viene visualizzato un elemento per <Style TargetType="local:CustomControl1"> definito nel file generic.xaml iniziale e tale stile definisce il modello di controllo e imposta altre proprietà.

Nota

Il prefisso "local:" è isolato nel codice XAML in cui è definito e usato. Gli spazi dei nomi XAML e i prefissi hanno un significato solo all'interno di XAML e sono indipendenti per ogni file XAML. I valori DefaultStyleKey nel codice non includono i prefissi.

Si applica a

Vedi anche