Proprietà associate
Le proprietà associate consentono a un oggetto di assegnare un valore per una proprietà che non definisce la propria classe. Ad esempio, gli elementi figlio possono usare proprietà associate per informare l'elemento padre di come devono essere presentati nell'interfaccia utente. Il Grid
controllo consente di specificare la riga e la colonna di un elemento figlio impostando le Grid.Row
proprietà associate e Grid.Column
. Grid.Row
e Grid.Column
sono proprietà associate perché sono impostate su elementi figlio di un Grid
oggetto , anziché su Grid
se stesso.
Le proprietà associabili devono essere implementate come proprietà associate negli scenari seguenti:
- Quando è necessario disporre di un meccanismo di impostazione delle proprietà disponibile per le classi diverse dalla classe di definizione.
- Quando la classe rappresenta un servizio che deve essere facilmente integrato con altre classi.
Per altre informazioni sulle proprietà associabili, vedere Proprietà associabili.
Creare una proprietà associata
Il processo di creazione di una proprietà associata è il seguente:
- Creare un'istanza
BindableProperty
con uno degli overload delCreateAttached
metodo. - Specificare
static
Get
i metodi PropertyName eSet
PropertyName come funzioni di accesso per la proprietà associata.
Creare una proprietà
Quando si crea una proprietà associata da utilizzare in altri tipi, la classe in cui viene creata la proprietà non deve derivare da BindableObject
. Tuttavia, la proprietà di destinazione per le funzioni di accesso deve essere di o derivare da BindableObject
.
È possibile creare una proprietà associata dichiarando una public static readonly
proprietà di tipo BindableProperty
. La proprietà associabile deve essere impostata sul valore restituito di uno degli overload del BindableProperty.CreateAttached
metodo. La dichiarazione deve trovarsi all'interno del corpo della classe proprietaria, ma all'esterno di qualsiasi definizione di membro.
Importante
La convenzione di denominazione per le proprietà associate è che l'identificatore della proprietà associata deve corrispondere al nome della proprietà specificato nel CreateAttached
metodo, con "Property" aggiunto.
Il codice seguente mostra un esempio di proprietà associata:
public static readonly BindableProperty HasShadowProperty =
BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);
Verrà creata una proprietà associata denominata HasShadowProperty
, di tipo bool
. La proprietà è di proprietà della ShadowEffect
classe e ha un valore predefinito .false
Per altre informazioni sulla creazione di proprietà associabili, inclusi i parametri che possono essere specificati durante la creazione, vedere Creare una proprietà associabile.
Creare funzioni di accesso
I metodi Static Get
PropertyName e Set
PropertyName sono necessari come funzioni di accesso per la proprietà associata. In caso contrario, il sistema di proprietà non sarà in grado di utilizzare la proprietà associata. La Get
funzione di accesso PropertyName deve essere conforme alla firma seguente:
public static valueType GetPropertyName(BindableObject target)
La Get
funzione di accesso PropertyName deve restituire il valore contenuto nel campo corrispondente BindableProperty
per la proprietà associata. A tale scopo, è possibile chiamare il GetValue
metodo , passando l'identificatore della proprietà associabile su cui ottenere il valore e quindi eseguendo il cast del valore risultante al tipo richiesto.
La Set
funzione di accesso PropertyName deve essere conforme alla firma seguente:
public static void SetPropertyName(BindableObject target, valueType value)
La Set
funzione di accesso PropertyName deve impostare il valore del campo corrispondente BindableProperty
per la proprietà associata. A tale scopo, è possibile chiamare il SetValue
metodo , passando l'identificatore della proprietà associabile su cui impostare il valore e il valore da impostare.
Per entrambe le funzioni di accesso, l'oggetto di destinazione deve essere di o derivare da BindableObject
.
Nell'esempio di codice seguente vengono illustrate le funzioni di accesso per la HasShadow
proprietà associata:
public static bool GetHasShadow (BindableObject view)
{
return (bool)view.GetValue (HasShadowProperty);
}
public static void SetHasShadow (BindableObject view, bool value)
{
view.SetValue (HasShadowProperty, value);
}
Utilizzare una proprietà associata
Dopo aver creato una proprietà associata, può essere utilizzata da XAML o codice. In XAML questo risultato viene ottenuto dichiarando uno spazio dei nomi con un prefisso, con la dichiarazione dello spazio dei nomi che indica il nome dello spazio dei nomi CLR (Common Language Runtime) e facoltativamente un nome di assembly. Per altre informazioni, vedere Spazi dei nomi XAML.
L'esempio di codice seguente illustra uno spazio dei nomi XAML per un tipo personalizzato che contiene una proprietà associata, definita all'interno dello stesso assembly del codice dell'applicazione che fa riferimento al tipo personalizzato:
<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
...
</ContentPage>
La dichiarazione dello spazio dei nomi viene quindi usata quando si imposta la proprietà associata su un controllo specifico, come illustrato nell'esempio di codice XAML seguente:
<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />
Il codice C# equivalente è visualizzato nell'esempio seguente:
var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);
Utilizzare una proprietà associata con uno stile
Le proprietà associate possono anche essere aggiunte a un controllo da uno stile. L'esempio di codice XAML seguente mostra uno stile esplicito che usa la HasShadow
proprietà associata, che può essere applicata ai Label
controlli:
<Style x:Key="ShadowEffectStyle" TargetType="Label">
<Style.Setters>
<Setter Property="local:ShadowEffect.HasShadow" Value="true" />
</Style.Setters>
</Style>
Style
può essere applicato a un elemento Label
impostando la relativa proprietà Style
sull'istanza di Style
utilizzando l'estensione di markup StaticResource
, come illustrato nell'esempio di codice seguente:
<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />
Per altre informazioni sugli stili, vedere Stili.
Scenari avanzati
Quando si crea una proprietà associata, sono disponibili diversi parametri facoltativi che possono essere impostati per abilitare scenari avanzati di proprietà associate. Sono inclusi il rilevamento delle modifiche alle proprietà, la convalida dei valori delle proprietà e la creazione di valori delle proprietà. Per altre informazioni, vedere Scenari avanzati.