Практическое руководство. Регистрация вложенного свойства зависимостей

В этом примере показано, как зарегистрировать присоединенное свойство и предоставить общедоступные методы доступа, чтобы можно было использовать свойство как в XAML, так и в коде. Присоединенные свойства — это концепция синтаксиса, определяемая XAML. Большинство присоединенных свойств для типов WPF также реализуются как свойства зависимостей. Можно использовать свойства зависимости в любых типах DependencyObject.

Пример

В следующем примере показано, как зарегистрировать присоединенное свойство как свойство зависимостей с помощью метода RegisterAttached. Класс поставщика имеет возможность предоставления метаданных по умолчанию для свойства, применяемых в случае, когда свойство используется в другом классе и этот класс не переопределяет метаданные. В этом примере значение по умолчанию свойства IsBubbleSource равно false.

Класс поставщика для присоединенного свойства (даже если оно не зарегистрировано как свойство зависимостей) должен предоставлять статические методы доступа get и set, соответствующие правилам именования Set[имя_присоединенного_свойства] и Get[имя_присоединенного_свойства]. Эти методы доступа требуются для того, чтобы действующее средство чтения XAML распознало свойство как атрибут в разметке XAML и разрешило соответствующие типы.

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
  "IsBubbleSource",
  typeof(Boolean),
  typeof(AquariumObject),
  new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
  element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
  return (Boolean)element.GetValue(IsBubbleSourceProperty);
}
Public Shared ReadOnly IsBubbleSourceProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsBubbleSource", GetType(Boolean), GetType(AquariumObject), New FrameworkPropertyMetadata(False, FrameworkPropertyMetadataOptions.AffectsRender))
Public Shared Sub SetIsBubbleSource(ByVal element As UIElement, ByVal value As Boolean)
    element.SetValue(IsBubbleSourceProperty, value)
End Sub
Public Shared Function GetIsBubbleSource(ByVal element As UIElement) As Boolean
    Return CType(element.GetValue(IsBubbleSourceProperty), Boolean)
End Function

См. также