Proprietà associate

Download Sample Scaricare l'esempio

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 Gridoggetto , 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:

  1. Creare un'istanza BindableProperty con uno degli overload del CreateAttached metodo.
  2. Specificare staticGeti metodi PropertyName e SetPropertyName 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 GetPropertyName e SetPropertyName 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 Getfunzione di accesso PropertyName deve essere conforme alla firma seguente:

public static valueType GetPropertyName(BindableObject target)

La Getfunzione 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 Setfunzione di accesso PropertyName deve essere conforme alla firma seguente:

public static void SetPropertyName(BindableObject target, valueType value)

La Setfunzione 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.