Я реализую логическую DependencyProperty, которая добавляет adorner к DependencyObject, если для него установлено значение true. Я хочу, чтобы значение DependencyProperty по умолчанию было истинным, но при этом не запускается PropertyChangedCallback, поэтому по умолчанию создатель не создается. Есть ли способ инициализации объекта PropertyChangedCallback?Увольнение пользовательского свойства DependencyProperty PropertyChangedCallback при инициализации
public static bool GetIsAdorned(DependencyObject obj)
{
return (bool)obj.GetValue(IsAdornedProperty);
}
public static void SetIsAdorned(DependencyObject obj, bool value)
{
obj.SetValue(IsAdornedProperty, value);
}
public static readonly DependencyProperty IsAdornedProperty =
DependencyProperty.RegisterAttached("IsAdorned",
typeof(bool),
typeof(UIElement),
new UIPropertyMetadata(true, OnIsAdornedChanged));
private static void OnIsAdornedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
var uiElement = dependencyObject as UIElement;
var newValue = (bool)e.NewValue;
var adornerLayer = AdornerLayer.GetAdornerLayer(uiElement);
if (newValue)
{
adornerLayer.Add(new MyAdorner(uiElement));
}
}
Просто примечание: при создании [настраиваемого вложенного свойства] (http://msdn.microsoft.com/en-us/library/ms749011.aspx#custom) параметр * ownerType * в RegisterAttached должен быть классом в котором вы определяете это свойство **, а не ** класс, в котором вы хотите применить свойство (т. е. не UIElement здесь). В противном случае вы не сможете применить свойство в XAML. – Clemens
Я всегда задавался вопросом об этом, так как в примере в документации не отображается класс, определяемый DependencyProperty, поэтому было неясно, к чему был установлен параметр ownerType. Странно, что у меня уже было несколько вариантов поведения: я установил параметр ownerType для класса, к которому я хочу применить свойство, и он не дал мне никаких проблем, и я могу установить свойство в XAML. Мне придется пройти через код и исправить это. Спасибо, Клеменс! –