Как я могу изменить значение по умолчанию для унаследованного свойства зависимости? В нашем случае мы создали подкласс Control, для которого по умолчанию Focusable
установлено значение «true». Мы хотим, чтобы для нашего подкласса по умолчанию было установлено значение false.
Что мы? Я просто установил для него значение false в конструкторе, но если кто-то использует ClearValue, он возвращается к значению по умолчанию, а не к значению, установленному в конструкторе.
Вот что я сейчас делаю для достижения этой цели ( Это тестовый элемент управления с DP, например, Foo.) Я не поклонник «нового», чтобы скрыть свойство, хотя благодаря AddOwner
он указывает на тот же общий ресурс. экземпляр, так что я думаю, это нормально. Похоже, он наследует и все другие значения метаданных, так что это хорошо. Просто интересно, правильно ли это?
public class TestControlBase : Control
{
public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
"Foo",
typeof(int),
typeof(TestControlBase),
new FrameworkPropertyMetadata(4) // Original default value
);
public int Foo
{
get { return (int)GetValue(FooProperty); }
set { SetValue(FooProperty, value); }
}
}
public class TestControl : TestControlBase
{
public static readonly new DependencyProperty FooProperty = TestControlBase.FooProperty.AddOwner(
typeof(TestControl),
new FrameworkPropertyMetadata(67) // New default for this subclass
);
}
Марк
ОБНОВЛЕНИЕ ...
Я думаю, что это даже лучше, поскольку оно устраняет «новый» вызов. Вы по-прежнему получаете доступ к нему через FooProperty в базовом классе, поскольку он использует AddOwner
. Таким образом, технически он один и тот же.
public class TestControl : TestControlBase
{
// Note this is private
private static readonly DependencyProperty AltFooProperty = TestControlBase.FooProperty.AddOwner(
typeof(TestControl),
new FrameworkPropertyMetadata(67) // New default for this subclass
);
}