DependencyProperty Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta una proprietà di dipendenza registrata con il sistema di proprietà di dipendenza. Le proprietà di dipendenza forniscono il supporto per espressioni di valore, data binding, animazione e notifica delle modifiche delle proprietà. Per altre info su come i valori dependencyProperty fungono da identificatori per le proprietà di dipendenza, vedi Panoramica delle proprietà di dipendenza.
public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyProperty final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyProperty
Public NotInheritable Class DependencyProperty
- Ereditarietà
- Attributi
Esempio
In questo esempio viene illustrato un utilizzo di base in cui viene stabilito un DependencyProperty oggetto come membro statico pubblico di una classe. A tale scopo, chiamare Register e archiviare il valore restituito come membro della classe . Per altri esempi, vedere Proprietà di dipendenza personalizzate.
public class Fish : Control
{
public static readonly DependencyProperty SpeciesProperty =
DependencyProperty.Register(
"Species",
typeof(String),
typeof(Fish), null
);
public string Species
{
get { return (string)GetValue(SpeciesProperty); }
set { SetValue(SpeciesProperty, (string)value); }
}
}
Commenti
I concetti relativi alle proprietà di dipendenza sono descritti in dettaglio nell'argomento Panoramica delle proprietà di dipendenza.
Le istanze di DependencyProperty vengono spesso a cui viene fatto riferimento nella documentazione come identificatori di proprietà di dipendenza. Gli identificatori consentono di fare riferimento a una proprietà di dipendenza registrata in un particolare tipo di proprietario DependencyObject . Quando il tipo di proprietario registra la proprietà, il tipo di proprietario espone l'istanza DependencyProperty come identificatore, che è un membro statico della classe proprietario.
DependencyObject proprietario fornisce l'archivio delle proprietà per la proprietà di dipendenza. Quando si usa una proprietà di dipendenza nel codice, è possibile usare un DependencyProperty identificatore come input per le chiamate ai metodi di sistema delle proprietà, ad esempio SetValue. Nella maggior parte dei casi, tuttavia, ottenere o impostare una proprietà di dipendenza è più semplice ottenendo o impostando il wrapper; questo concetto è illustrato in Panoramica delle proprietà di dipendenza.
DependencyProperty supporta una conversione nativa per la sintassi dell'attributo XAML per la compilazione dei valori, che viene usata quando un setter specifica il relativo valore Property . Questa conversione usa un ownerTypeName.form propertyName per la stringa di input.
Note
Una sintassi correlata che può essere usata anche per specificare una proprietà in base al nome ed è richiesta da determinati dati e API di animazione è la sintassi del percorso delle proprietà. È possibile utilizzare un percorso di proprietà per fare riferimento alla struttura di una classe con proprietà e il valore di tale proprietà. Per altre info, vedi Sintassi property-path.
Tip
Se si esegue la programmazione usando un linguaggio di Microsoft .NET (C#), il tipo TypeName proietta come System.Type. Quando si esegue la programmazione con C#, è comune usare l'operatore typeof per ottenere riferimenti a System.Type di un tipo.
Se usi C++/WinRT puoi usare la winrt::xaml_typename<T>() funzione helper per creare un TypeName oggetto. Per altri dettagli, vedere modello di funzione winrt::xaml_typename e un esempio di codice.
Il Windows Runtime implementa la funzionalità del linguaggio di proprietà associata XAML con DependencyProperty identificatori e archiviazione delle proprietà in un DependencyObject. Per altre info, vedi Panoramica delle proprietà associate.
Proprietà di dipendenza personalizzate
Se si desidera che le proprietà dei tipi personalizzati supportino espressioni di valore, data binding o animazione, è necessario ripristinare le proprietà con una proprietà di dipendenza seguendo queste linee guida:
- Registrare una proprietà di dipendenza usando il metodo Register , che restituisce un oggetto
DependencyProperty. Si tratta dell'identificatore della proprietà di dipendenza. È consigliabile esporre questo oggetto come proprietà di sola lettura statica accessibile nella classe . Per convenzione, il nome di questoDependencyPropertycampo identificatore deve terminare con "Property". - Durante la registrazione, è possibile specificare PropertyMetadata per la proprietà per definire ulteriormente i comportamenti della proprietà.
- Fornire
getesetle funzioni di accesso per la proprietà: si tratta dei wrapper di proprietà e semplifica l'accesso alla proprietà per tutti i chiamanti.
Riferimenti XAML a un nome di proprietà di dipendenza
Alcune proprietà in genere impostate nel markup XAML usano DependencyProperty come valore. Ad esempio, imposti Setter.Property in XAML. Per impostare tale proprietà in XAML, specificare il nome della proprietà di dipendenza come valore dell'attributo.
Per Setter.Property il tipo da cui si fa riferimento a un nome di proprietà di dipendenza è già compreso nell'ambito di TargetType dello stile in cui esiste il setter . Per una proprietà di dipendenza nell'oggetto TargetType , è possibile specificare un valore Setter.Property usando il nome semplice della proprietà di dipendenza. Ad esempio, se si dispone di uno Stile destinato a un dispositivo di scorrimento e si desidera applicare uno stile alla proprietà Orientation , il valore dell'attributo Property può essere semplicemente "Orientation". I nomi semplici funzionano anche finché la proprietà di dipendenza proviene da una classe nell'ereditarietà più approfondita del tipo di destinazione. Ad esempio, per applicare uno stile alla proprietà Visibility in Style per un dispositivo di scorrimento, funzionerà il valore dell'attributo Property "Visibility". In tal caso Visibility è stato definito da UIElement, ma eredita in Slider.
È anche possibile usare Setter.Property per fare riferimento a un nome di proprietà associata. Per il valore dell'attributo, usa il formato AttachedPropertyOwner.AttachedPropertyName, proprio come vuoi usare per impostare tale proprietà associata come attributo in XAML. Ad esempio, ecco un setter che imposta la proprietà associata AutomationProperties.ItemType in uno stile: <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/>
Note
Il nome di una proprietà di dipendenza non è il nome dell'identificatore DependencyProperty di proprietà statica. È la stringa del nome con cui la proprietà è registrata e il nome che rappresenta il nome di utilizzo tipico per tale proprietà nella programmazione Windows Runtime quando esposto da Microsoft IntelliSense e dalla documentazione di riferimento. In altre parole, non vuoi che la stringa specificata per Setter.Property in XAML termini con "Property" (ad eccezione di alcuni rari casi in cui la proprietà di dipendenza contiene effettivamente il suffisso "Property").
Uso di DependencyProperty (identificatore di proprietà di dipendenza) nel codice
Esistono diversi metodi di utilità per il sistema di proprietà Windows Runtime che usano un DependencyProperty valore come parametro di input. Questi includono:
- DependencyObject.ClearValue
- DependencyObject.GetAnimationBaseValue
- DependencyObject.GetValue
- DependencyObject.ReadLocalValue
- DependencyObject.SetValue
- DependencyPropertyChangedEventArgs.Property
- Costruttore Setter(DependencyProperty,Object)
Proprietà
| Nome | Descrizione |
|---|---|
| UnsetValue |
Specifica un valore statico utilizzato dal sistema di proprietà anziché |
Metodi
| Nome | Descrizione |
|---|---|
| GetMetadata(TypeName) |
Recupera il valore dei metadati della proprietà per la proprietà di dipendenza come registrato in un tipo. Specificare il tipo da cui si desidera ottenere informazioni come riferimento al tipo. |
| Register(String, TypeName, TypeName, PropertyMetadata) |
Registra una proprietà di dipendenza con il nome della proprietà, il tipo di proprietà, il tipo di proprietario e i metadati delle proprietà specificati per la proprietà. Utilizzare questo metodo quando si definisce o inizializza una classe derivata DependencyObject proprietaria della proprietà di dipendenza registrata. |
| RegisterAttached(String, TypeName, TypeName, PropertyMetadata) |
Registra una proprietà di dipendenza associata con il nome della proprietà, il tipo di proprietà, il tipo di proprietario e i metadati delle proprietà specificati per la proprietà. |