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 il valore predefinito 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

Tasto che fa riferimento allo stile predefinito per il controllo . Per funzionare correttamente come parte della ricerca dello stile del tema, si prevede che questo valore sia un valore System.Type .

Note

C++ usa una stringa che rappresenta il nome completo del tipo. Ma questo si basa su codice generato che produce un TypeName dopo l'accesso da parte di 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 la logica scritta in C#, il valore di DefaultStyleKey deve essere un'istanza di System.Type. In genere questo valore viene impostato nel costruttore predefinito:
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
  • Per un controllo con la logica scritta in C++, 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 questo valore viene impostato nel costruttore predefinito:
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}

Note

In definitiva, la stringa da sola non è sufficiente per supportare un riferimento al tipo C++. Se usi le opzioni Aggiungi/Nuovo elemento/Controllo basato su modelli in Esplora soluzioni, i modelli e il supporto per C++ 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. Ma se sei curioso di avere 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 non è insolito. Il risultato è che lo stile predefinito è quello definito dalla classe di 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 cerca 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 quale risorsa XAML denominata caricare come questo stile. In formato XAML, gli stili sono realmente 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 automaticamente. 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 in base ai 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, verrà visualizzato un elemento per <Style TargetType="local:CustomControl1"> definito nel file generic.xaml iniziale e tale stile definisce il modello di controllo, nonché l'impostazione di altre proprietà.

Note

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 autonomi per ogni file XAML. I valori DefaultStyleKey nel codice non includono i prefissi.

Si applica a

Vedi anche