Поделиться через


Практическое руководство. Добавление типа владельца для свойства зависимости

В этом примере демонстрируется способ добавления класса в качестве владельца свойства зависимостей, зарегистрированного для другого типа. Выполняя это, средство чтения данныхWPF XAML и система свойств способны распознать класс в качестве дополнительного владельца свойства. Добавление в качестве владельца при необходимости позволяет добавлять класс для предоставления метаданных определенного типа.

В следующем примере StateProperty является свойством, зарегистрированным классом MyStateControl. Класс UnrelatedStateControl добавляет себя в качестве владельца StateProperty с помощью метода AddOwner, специальным образом использующего подпись, доступную для новых метаданных свойства зависимостей, так как она существует в добавленном типе. Обратите внимание, что следует предоставить методы доступа common language runtime (CLR) для свойства, как показано в примере Практическое руководство. Реализация свойства зависимостей, а также повторно предоставить идентификатор свойства зависимостей для класса, добавляемого в качестве владельца.

Без оболочки свойство зависимости будет по-прежнему работать с точки зрения программного доступа с помощью GetValue или SetValue. Однако, чаще всего требуется параллельное поведение системы свойств и оболочек свойств CLR. Оболочки облегчают программную установку свойства зависимости и обеспечивают установку свойств в качестве атрибутов XAML.

Сведения о том, как переопределить метаданные по умолчанию, содержатся в разделе Практическое руководство. Переопределение метаданных для свойств зависимости.

Пример

  Public Class MyStateControl
      Inherits ButtonBase
    Public Sub New()
        MyBase.New()
    End Sub
    Public Property State() As Boolean
      Get
          Return CType(Me.GetValue(StateProperty), Boolean)
      End Get
      Set(ByVal value As Boolean)
          Me.SetValue(StateProperty, value)
      End Set
    End Property
    Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
  End Class


...


  Public Class UnrelatedStateControl
      Inherits Control
    Public Sub New()
    End Sub
    Public Shared ReadOnly StateProperty As DependencyProperty = MyStateControl.StateProperty.AddOwner(GetType(UnrelatedStateControl), New PropertyMetadata(True))
    Public Property State() As Boolean
      Get
          Return CType(Me.GetValue(StateProperty), Boolean)
      End Get
      Set(ByVal value As Boolean)
          Me.SetValue(StateProperty, value)
      End Set
    End Property
  End Class
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); }
  }
}

См. также

Основные понятия

Пользовательские свойства зависимостей

Общие сведения о свойствах зависимости