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(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 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
See Remarks
- Ereditarietà
- Attributi
Requisiti Windows
Famiglia di dispositivi |
Windows 10 (è stato introdotto in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
|
Esempio
Questo esempio mostra un utilizzo di base in cui dependencyProperty viene stabilito 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); }
}
}
Public Class Fish
Inherits Control
Public Shared ReadOnly SpeciesProperty As DependencyProperty = _
DependencyProperty.Register(
"Species", _
GetType(String), _
GetType(Fish), _
Nothing)
Public Property Species As String
Get
Species = CType(GetValue(SpeciesProperty), String)
End Get
Set(value As String)
SetValue(SpeciesProperty, value)
End Set
End Property
End Class
Un esempio di estensioni del componente Visual C++ (C++/CX) non viene mostrato qui perché deve essere considerato completamente diverso dagli esempi di Microsoft .NET e include diversi file di codice. Vedere esempi in Proprietà di dipendenza personalizzate.
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 referenziate 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 identificatore DependencyProperty come input per le chiamate ai metodi del sistema di 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 è 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 modulo ownerTypeName**.**propertyName per la stringa di input.
Nota
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 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 esegue la programmazione con 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 sarà necessario creare uno struct helper TypeName , è possibile usare l'estensione del componente typeid.
Il Windows Runtime implementa la funzionalità del linguaggio di proprietà associata XAML con gli identificatori DependencyProperty e l'archiviazione delle proprietà in 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, è consigliabile ripristinare le proprietà con una proprietà di dipendenza seguendo queste linee guida:
- Registrare una proprietà di dipendenza usando il metodo Register , che restituisce 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 del campo dell'identificatore DependencyProperty deve terminare con "Property".
- Durante la registrazione, è possibile specificare PropertyMetadata per la proprietà per definire ulteriormente i comportamenti della proprietà.
- Fornire funzioni di accesso get e set 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, 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à incluso nell'ambito di TargetType dello stile in cui è presente 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 un oggetto Style 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 questo caso La visibilità è stata definita da UIElement, ma eredita in Slider.
È anche possibile utilizzare Setter.Property per fare riferimento a un nome di proprietà associato. Per il valore dell'attributo, usare il formato AttachedPropertyOwner.AttachedPropertyName, proprio come si usa per impostare tale proprietà associata come attributo in XAML. Di seguito, ad esempio, è riportato 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 di proprietà statica DependencyProperty. È 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 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 che sono metodi di utilità per il sistema di proprietà Windows Runtime che usano un valore DependencyProperty come parametro di input. Queste includono:
- DependencyObject.ClearValue
- DependencyObject.GetAnimationBaseValue
- DependencyObject.GetValue
- DependencyObject.ReadLocalValue
- DependencyObject.SetValue
- DependencyPropertyChangedEventArgs.Property
- Costruttore Setter(DependencyProperty,Object)
Proprietà
UnsetValue |
Specifica un valore statico utilizzato dal sistema di proprietà anziché null per indicare che la proprietà esiste, ma non ha il relativo valore impostato dal sistema di 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 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 per definire o inizializzare 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 proprietà, il tipo di proprietario e i metadati delle proprietà per la proprietà. |