Sdílet prostřednictvím


DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metoda

Definice

Přepíše metadata vlastnosti závislosti jen pro čtení, která je reprezentována tímto identifikátorem vlastnosti závislosti.

public:
 void OverrideMetadata(Type ^ forType, System::Windows::PropertyMetadata ^ typeMetadata);
public void OverrideMetadata (Type forType, System.Windows.PropertyMetadata typeMetadata);
member this.OverrideMetadata : Type * System.Windows.PropertyMetadata -> unit
Public Sub OverrideMetadata (forType As Type, typeMetadata As PropertyMetadata)

Parametry

forType
Type

Typ, na kterém tato vlastnost závislost existuje, a metadata by měla být přepsána.

typeMetadata
PropertyMetadata

Metadata zadaná pro tento typ.

Výjimky

Pokus o přepsání metadat u vlastnosti závislosti čtení a zápisu (nelze provést pomocí tohoto podpisu).

Metadata byla již vytvořena pro vlastnost, protože existuje u zadaného typu.

Příklady

Následující příklad přepíše metadata pro existující vlastnost závislostí jen pro čtení, kterou třída dědí. V tomto případě byl cílem scénáře přidat zpětné volání hodnoty coerce, které metadata základní vlastnosti neměla. Metadata můžete také přepsat z jakéhokoli jiného důvodu, proč je přepsání metadat obvykle vhodné (změna výchozí hodnoty, přidání FrameworkPropertyMetadataOptions hodnot atd.).

static Fishbowl() {
  Aquarium.AquariumSizeKey.OverrideMetadata(
    typeof(Aquarium),
    new PropertyMetadata(
      double.NaN,
      null,
      new CoerceValueCallback(CoerceFishbowlAquariumSize)
    )
  );
}

static object CoerceFishbowlAquariumSize(DependencyObject d,Object baseValue)
{
    //Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Fishbowl fb = (Fishbowl)d;
    //other constraints assure that H,W are positive
    return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2));
}
Shared Sub New()
    Aquarium.AquariumSizeKey.OverrideMetadata(GetType(Aquarium), New PropertyMetadata(Double.NaN, Nothing, New CoerceValueCallback(AddressOf CoerceFishbowlAquariumSize)))
End Sub

Private Shared Function CoerceFishbowlAquariumSize(ByVal d As DependencyObject, ByVal baseValue As Object) As Object
    'Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Dim fb As Fishbowl = CType(d, Fishbowl)
    'other constraints assure that H,W are positive
    Return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2))
End Function

Poznámky

Přepsání metadat u vlastnosti závislosti jen pro čtení se provádí z podobných důvodů jako přepsání metadat u vlastnosti závislosti pro čtení i zápis a je omezeno na přístup na úrovni klíče, protože chování zadané v metadatech může změnit chování sady (například výchozí hodnota).

Stejně jako u vlastností závislostí pro čtení i zápis by se měla přepsání metadat u vlastnosti závislosti jen pro čtení provést před tím, než se tato vlastnost použije systémem vlastností (to odpovídá době, kdy se vytvoří instance konkrétních instancí objektů, které registrují vlastnost). Volání by OverrideMetadata měla být provedena pouze v rámci statických konstruktorů typu, který poskytuje sám sebe jako forType parametr této metody, nebo ekvivalentní inicializace pro danou třídu.

Tato metoda efektivně předá metodu OverrideMetadata a předá DependencyPropertyKey instanci jako parametr klíče.

Platí pro

Viz také