发布网友 发布时间:2024-07-04 04:37
共1个回答
热心网友 时间:2024-07-29 00:16
很多依赖项属性类都已经将默认元数据作为其注册过程的一部分而创建。这包含作为 WPF02API 一部分的依赖项属性。通过其类继承继承依赖项属性的类可以重写原始的元数据,以便可以通过元数据更改的属性的特征将与任何特定于子类的要求匹配。在依赖项属性上重写元数据的操作必须在将该属性提供给属性系统使用之前进行,也就是说,在对注册属性的对象的特定实例进行实例化之前进行。必须在将其自身提供为 OverrideMetadata 的forType 参数的类型的静态构造内执行对 OverrideMetadata 的调用。如果在所有者类型的实例存在之后尝试更改元数据,这将不会引发异常,但会在属性系统中导致不一致的行为。此外,每种类型只可以重写一次元数据。以后在同一类型上重写元数据的尝试将会引发异常 Visual Basic PublicClass MyStateControl Inherits ButtonBase PublicSubNew() MyBase.New() EndSubPublicProperty State() AsBooleanGetReturn CType(Me.GetValue(StateProperty), Boolean) EndGetSet(ByVal value AsBoolean) Me.SetValue(StateProperty, value) EndSetEndPropertyPublicSharedReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False)) EndClass ... PublicClass MyAdvancedStateControl Inherits MyStateControl PublicSubNew() MyBase.New() EndSubSharedSubNew() MyStateControl.StateProperty.OverrideMetadata(GetType(MyAdvancedStateControl), New PropertyMetadata(True)) EndSubEndClass C# publicclass MyStateControl : ButtonBase { public MyStateControl() : base() { } public Boolean State { get { return (Boolean)this.GetValue(StateProperty); } set { this.SetValue(StateProperty, value); } } publicstatic readonly DependencyProperty StateProperty = DependencyProperty.Register( "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false)); } ... publicclass MyAdvancedStateControl : MyStateControl { public MyAdvancedStateControl() : base() { } static MyAdvancedStateControl() { MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true)); } }