Share via


Procedura: aggiungere un tipo di proprietario per una proprietà di dipendenza

Aggiornamento: novembre 2007

In questo esempio viene mostrato come aggiungere una classe come proprietario di una proprietà di dipendenza registrata per un tipo diverso. In questo modo, il lettore XAML di WPF e il sistema di proprietà sono entrambi in grado di riconoscere la classe come proprietario aggiuntivo della proprietà. L'aggiunta come proprietario consente alla classe aggiunta di fornire metadati specifici per il tipo.

Nell'esempio seguente, StateProperty è una proprietà registrata dalla classe MyStateControl. La classe UnrelatedStateControl viene aggiunta come proprietario di StateProperty utilizzando il metodo AddOwner che utilizza in modo specifico la firma che consente nuovi metadati per la proprietà di dipendenza presente sul tipo aggiunto. Notare che è necessario fornire funzioni di accesso Common Language Runtime (CLR) per la proprietà in modo simile a quanto avviene nell'esempio mostrato nell'esempio Procedura: implementare una proprietà di dipendenza, nonché esporre nuovamente l'identificatore della proprietà di dipendenza nella classe aggiunta come proprietario.

Senza wrapper, la proprietà di dipendenza funzionerebbe ancora dal punto di vista dell'accesso a livello di codice utilizzando l'oggetto GetValue o SetValue. Tuttavia, è preferibile affiancare questo comportamento del sistema di proprietà con i wrapper della proprietà CLR . I wrapper semplificano l'impostazione a livello di codice della proprietà di dipendenza e rendono possibile l'impostazione delle proprietà come attributi XAML.

Per ulteriori informazioni su come eseguire l'override dei metadati predefiniti, vedere Procedura: eseguire l'override dei metadati per una proprietà di dipendenza.

Esempio

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 UnrelatedStateControl : Control
{
  public UnrelatedStateControl() { }
  public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); }
  }
}

Vedere anche

Concetti

Proprietà Dependency personalizzate

Cenni preliminari sulle proprietà di dipendenza