Есть некий UserControl, естественно являющийся DependencyObject'om для которого нужно создать свое DependencyProperty по типу такого:
Ответ
Обычное свойство зависимостей (также влияющее на собственную перерисовку в примере). В конструкторе FrameworkPropertyMetadata можно определить дополнительные настройки, такие как метод корректировки значения или обработки измененного значения. MSDN или книга "WPF 3.0-4.0 для профессионалов"
#region Единичный размер (NormalSize)
[Category("Group properties")]
public Size NormalSize
{
get { return (Size)GetValue(NormalSizeProperty); }
set { SetValue(NormalSizeProperty, value); }
}
public static readonly DependencyProperty NormalSizeProperty =
DependencyProperty.Register("NormalSize", typeof(Size), typeof(GroupPanel), new FrameworkPropertyMetadata(new Size(200, 190)) { AffectsArrange = true, AffectsMeasure = true });
#endregion
Есть очень полезный тип зависимых свойств - т.н. Attatched Property. Смысл такой, как например, Grid.Row или Canvas.Top. его можно "прикрепить" к любому DependencyObject и затем его использовать уже непосредственно в контроле. При инициализации требуется чуть больше кода, но он идейно обоснован и без него никак. Вот пример Attatched Property.
static GroupPanel() // - статический конструктор класса
{
var metadata =
new FrameworkPropertyMetadata();
metadata.AffectsParentArrange = true; - различные атрибуты
metadata.AffectsParentMeasure = true;
BreakBeforeProperty =
DependencyProperty.RegisterAttached(
"ColumnBreakBefore",
typeof(bool), typeof(GroupPanel),
metadata);
}
#region Свойство разрыва (BreakBefore)
public static DependencyProperty BreakBeforeProperty;
public static void SetColumnBreakBefore(UIElement element,
Boolean value)
{
element.SetValue(BreakBeforeProperty, value);
}
public static Boolean GetColumnBreakBefore(UIElement element)
{
return (bool)element.GetValue(BreakBeforeProperty);
}
#endregion
Замечание по использованию. Чтобы Attatched Property работало правильно и распознавалась системой, необходимо соблюдать соглашение по наименованию статичестих методов
public static тип свойства Get(Set)имя свойства(тип объекта).
Надеюсь это понятно. В моем примере это
public static Boolean GetColumnBreakBefore(UIElement element) { }
Комментариев нет:
Отправить комментарий