Как я могу изменить значение по умолчанию для унаследованного свойства зависимостей?В нашем случае мы создали подкласс Control, который по умолчанию имеет Focusable
, установленный в «true».Мы хотим, чтобы у нашего подкласса было значение по умолчанию «false».
Мы просто устанавливали значение «false» в конструкторе, но если кто-то использует ClearValue, он возвращается к значению по умолчанию,не значение, установленное в конструкторе.
Вот что я сейчас делаю для достижения этого (например, это тестовый элемент управления с DP 'Foo'). Я не фанат'new' скрывает свойство, хотя благодаря 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
);
}