Condividi tramite


Procedura: eseguire l'override dei metadati per una proprietà di dipendenza

Aggiornamento: novembre 2007

In questo esempio viene mostrato come eseguire l'override dei metadati delle proprietà di dipendenza predefiniti che provengono da una classe ereditata, chiamando il metodo OverrideMetadata e fornendo metadati specifici del tipo.

Esempio

Tramite la definizione del relativo oggetto PropertyMetadata, una classe può specificare i comportamenti della proprietà di dipendenza, ad esempio il valore predefinito e i callback del sistema di proprietà. Molte classi della proprietà di dipendenza dispongono già di metadati predefiniti stabiliti come parte del processo di registrazione. Sono incluse le proprietà di dipendenza che fanno parte delle API WPF. Una classe che eredita la proprietà di dipendenza tramite l'ereditarietà di classe può eseguire l'override dei metadati originali in modo che le caratteristiche della proprietà che è possibile modificare tramite i metadati soddisfino qualsiasi requisito specifico della sottoclasse.

L'override dei metadati di una proprietà di dipendenza deve essere eseguito prima che la proprietà venga resa utilizzabile dal sistema di proprietà, ovvero nel momento in cui vengono create istanze specifiche degli oggetti che registrano la proprietà. Le chiamate a OverrideMetadata devono essere eseguite all'interno dei costruttori statici del tipo che fornisce se stesso come parametro forType di OverrideMetadata. Il tentativo di modificare i metadati dopo la creazione delle istanze del tipo di proprietario non genererà eccezioni, ma darà come risultato comportamenti incoerenti nel sistema della proprietà. Inoltre, l'override di metadati può essere eseguito solo una volta per tipo. I successivi tentativi di eseguire l'override dei metadati sullo stesso tipo genereranno un'eccezione.

Nell'esempio seguente, la classe personalizzata MyAdvancedStateControl esegue l'override dei metadati forniti per StateProperty da MyAdvancedStateControl con i nuovi metadati delle proprietà. Ad esempio, il valore predefinito di StateProperty sarà true quando viene eseguita una query sulla proprietà in un'istanza MyAdvancedStateControl appena creata.

public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); } 
  }
  public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}


...


public class MyAdvancedStateControl : MyStateControl
{
  public MyAdvancedStateControl() : base() { }
  static MyAdvancedStateControl()
  {
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true));
  }
}

Vedere anche

Concetti

Cenni preliminari sulle proprietà di dipendenza

Proprietà Dependency personalizzate

Riferimenti

DependencyProperty

Altre risorse

Procedure relative alle proprietà

Esempi di proprietà