Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано, как добавить класс в качестве владельца свойства зависимости, зарегистрированного для другого типа. Таким образом средство чтения WPF XAML и система свойств могут распознавать класс как дополнительного владельца свойства. Опционально добавление в качестве владельца позволяет добавляющему классу предоставлять метаданные, специфичные для типа.
В следующем примере StateProperty
является свойством, зарегистрированным классом MyStateControl
. Класс UnrelatedStateControl
добавляет себя в качестве владельца StateProperty
, используя метод AddOwner, в частности сигнатуру, которая позволяет создавать новые метаданные для свойства зависимости, как они существуют на добавляющем типе. Обратите внимание, что необходимо предоставить доступ к методам среды выполнения общего языка (CLR) для свойства, аналогичного примеру, приведенному в примере Реализация свойства зависимости, а также снова сделать доступным идентификатор свойства зависимости для добавляемого класса как владельца.
Без оболочки свойство зависимостей по-прежнему будет работать с точки зрения программного доступа с помощью GetValue или SetValue. Но обычно требуется параллельное поведение системы свойств с оболочками свойств CLR. Оболочки упрощают настройку свойства зависимостей программным способом и позволяют задать свойства в качестве атрибутов XAML.
Сведения о переопределении метаданных по умолчанию см. в разделе Переопределение метаданных для свойства зависимостей.
Пример
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 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 : 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); }
}
}
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
См. также
.NET Desktop feedback