DependencyProperty Classe

Definizione

Rappresenta una proprietà di dipendenza registrata con il sistema delle proprietà di dipendenza. Le proprietà di dipendenza forniscono supporto per espressioni di valore, data binding, animazione e notifica delle modifiche delle proprietà. Per altre informazioni sul modo in cui i valori DependencyProperty fungono da identificatori per le proprietà di dipendenza, vedere 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à
Object Platform::Object IInspectable DependencyProperty
Attributi

Esempio

In questo esempio viene illustrato un utilizzo di base in cui viene DependencyProperty stabilito un membro statico pubblico di una classe. Questa operazione viene eseguita chiamando Register e archiviando 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); }
    }
}

Un esempio di estensioni dei componenti di Visual C++ (C++/CX) non è illustrato qui perché deve essere considerato completamente diverso dagli esempi di Microsoft .NET e implica diversi file di codice. Vedere esempi nelle proprietà delle dipendenze personalizzate.

Commenti

I concetti relativi alle proprietà di dipendenza sono illustrati in dettaglio nella panoramica delle proprietà di dipendenza.

Le istanze di DependencyProperty sono spesso a cui si fa riferimento nella documentazione come identificatori di proprietà di dipendenza. Gli identificatori forniscono un modo per fare riferimento a una proprietà di dipendenza registrata in un determinato tipo di proprietario DependencyObject . Quando il tipo di proprietario registra la proprietà, il tipo di proprietario espone l'istanza DependencyProperty come identificatore, ovvero un membro statico della classe proprietario.

Il proprietario DependencyObject 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. Tuttavia, nella maggior parte dei casi, ottenere o impostare una proprietà di dipendenza è più semplice recuperando o impostando il wrapper; questo concetto viene spiegato in Panoramica delle proprietà di dipendenza.

DependencyProperty supporta una conversione nativa per la sintassi dell'attributo XAML per il riempimento dei valori, che viene usata quando un Setter specifica il relativo valore Proprietà . Questa conversione usa un modulo ownerTypeName**.**propertyName per la stringa di input.

Nota

Una sintassi correlata che può essere usata anche per specificare una proprietà per nome ed è richiesta da determinati dati e API di animazione è la sintassi del percorso delle proprietà. È possibile usare 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 proprietà-percorso.

Suggerimento

Se si esegue la programmazione usando un linguaggio Microsoft .NET (C# o Microsoft Visual Basic), i progetti di tipo TypeName come System.Type. Quando si usa C#, è comune usare l'operatore typeof per ottenere riferimenti al tipo System.Type di un tipo. In Microsoft Visual Basic usare GetType. Se si usano estensioni del componente Visual C++ (C++/CX), dove è necessario creare uno struct helper TypeName , è possibile usare l'estensione del componente typeid.

La Windows Runtime implementa la funzionalità del linguaggio di proprietà associata XAML con DependencyProperty identificatori e archiviazione delle proprietà in un oggetto DependencyObject. Per altre info, vedi Panoramica delle proprietà associate.

Proprietà di dipendenza personalizzate

Se si desidera che le proprietà nei tipi personalizzati supportino espressioni di valore, data binding o animazione, è necessario eseguire il backup delle proprietà con una proprietà di dipendenza seguendo queste linee guida:

  • Registrare una proprietà di dipendenza usando il metodo Register , che restituisce un DependencyPropertyoggetto . 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 del DependencyProperty campo identificatore deve terminare con "Property".
  • Durante la registrazione, è possibile fornire PropertyMetadata per la proprietà per definire ulteriormente i comportamenti della proprietà.
  • Fornire get e set accedere alle funzioni di accesso per la proprietà: si tratta dei wrapper delle 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, si imposta 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à ambito dal 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 vuole assegnare uno stile alla proprietà Orientation , il valore dell'attributo Property può essere solo "Orientamento". 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 assegnare uno stile alla proprietà Visibility in Style per un dispositivo di scorrimento, il valore dell'attributo Property di "Visibilità" funzionerà. In questo caso la visibilità è stata definita da UIElement, ma eredita in Slider.

È anche possibile usare Setter.Property per fare riferimento a un nome di proprietà collegato. Per il valore dell'attributo, usare il modulo AttachedPropertyOwner.AttachedPropertyName, proprio come si userà 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"/>

Nota

Il nome di una proprietà di dipendenza non è il nome dell'identificatore DependencyProperty della proprietà statica. È la stringa del nome con cui la proprietà è registrata e il nome che corrisponde al nome di utilizzo tipico per tale proprietà nella programmazione Windows Runtime quando esposto da Microsoft IntelliSense e la documentazione di riferimento. In altre parole, non si vuole specificare la stringa specificata per Setter.Property in XAML per terminare con "Property" (ad eccezione di alcuni rari casi in cui la proprietà di dipendenza contiene effettivamente il suffisso "Property").

Uso di un oggetto DependencyProperty (identificatore della 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. Queste includono:

Proprietà

UnsetValue

Specifica un valore statico utilizzato dal sistema delle proprietà anziché null indicare che la proprietà esiste, ma non ha il relativo valore impostato dal sistema delle proprietà o da qualsiasi codice dell'app.

Metodi

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 vogliono ottenere informazioni come riferimento al tipo.

Register(String, TypeName, TypeName, PropertyMetadata)

Registra una proprietà di dipendenza con il nome della proprietà specificato, il tipo di proprietà, il tipo di proprietario e i metadati delle proprietà per la proprietà. Usare questo metodo durante la definizione o l'inizializzazione di una classe derivata DependencyObject che possiede la 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 proprietà, il tipo di proprietario e i metadati delle proprietà per la proprietà.

Si applica a

Vedi anche