如何解决如何更改继承的依赖项属性的默认值?
| 如何更改继承的依赖项属性的默认值?在我们的例子中,我们创建了Control的子类,默认情况下将其ѭ0设置为\'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
);
}
标记
更新...
我认为这样做更好,因为它消除了“ new”调用。您仍然可以通过基类上的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
);
}
解决方法
覆盖基类属性的正确方法是:
static TestControl() {
FooProperty.OverrideMetadata(
typeof(TestControl),new FrameworkPropertyMetadata(67)
);
}
编辑:
AddOwner
是指在不相关的类型(即TextBox
和TextBlock
中的TextProperty
)之间共享相同的DependencyProperty
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。